[
  {
    "path": ".gitignore",
    "content": "*.swp\n__pycache__\n.ipynb_checkpoints\n\ndata\n"
  },
  {
    "path": "LICENSE",
    "content": " Copyright (c) 2018 Uber Technologies, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "NOTICE",
    "content": "Atari Model Zoo includes derived work from Dopamine (https://github.com/google/dopamine) under the Apache License 2.0:\n\nCopyright 2018 The Dopamine Authors.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\n limitations under the License.\n\nThe derived work can be found in the files:  atari_zoo/dopamine_preprocessing.py\n"
  },
  {
    "path": "README.md",
    "content": "# Atari Zoo\n\nThe aim of this project is to disseminate deep reinforcement learning agents trained by a variety of algorithms, and to enable easy analysis, comparision, and visualization of them. The hope is to reduce friction for further \nresearch into understanding reinforcement learning agents. \nThis project makes use of the excellent [Lucid](https://github.com/tensorflow/lucid) neural network visualization library, and integrates with the [Dopamine](https://github.com/google/dopamine) [model release](https://github.com/google/dopamine/tree/master/docs#downloads).\n\nA paper introducing this work was published at IJCAI 2019: [An Atari Model Zoo for Analyzing, Visualizing, and Comparing Deep Reinforcement Learning Agents](https://arxiv.org/abs/1812.07069).\n\n## About\n\nThis software package is accompanied by a binary release of (1) frozen models trained on Atari games by a variety of deep reinforcement learning methods, and (2) cached gameplay experience of those agents in their\ntraining environments, which is hosted online.\n\n## Installation and Setup\n\nDependencies:\n* [tensorflow](https://github.com/tensorflow/tensorflow) (with version >0.8 <2.0; *we are not currently supporting TF 2.x*)\n* [lucid](https://github.com/tensorflow/lucid) (version\n* [matplotlib](https://matplotlib.org/) for some visualiztions\n* [moviepy](https://zulko.github.io/moviepy/) (optional for making movies) \n* [gym](https://github.com/openai/gym) (installed with support for Atari; optional for generating new rollouts)\n* [opencv-python](https://pypi.org/project/opencv-python/) (optional for generating new rollouts)\n* [tensorflow-onnx](https://github.com/onnx/tensorflow-onnx) (optional for exporting to [ONNX](https://onnx.ai/) format)\n\nTo install, run ```setup.py install``` after installing dependencies.\n\n## Examples\n\n```python\n\nimport atari_zoo\nfrom atari_zoo import MakeAtariModel\nfrom pylab import *\n\nalgo = \"a2c\"\nenv = \"ZaxxonNoFrameskip-v4\"\nrun_id = 1\ntag = \"final\"\nm = MakeAtariModel(algo,env,run_id,tag)()\n\n# get observations, frames, and ram state from a representative rollout\nobs = m.get_observations()\nframes = m.get_frames()\nram = m.get_ram()\n\n# visualize first layer of convolutional weights\nsession = atari_zoo.utils.get_session()\n\nm.load_graphdef()\nm.import_graph()\n\nconv_weights = m.get_weights(session,0)\natari_zoo.utils.visualize_conv_w(conv_weights)\nshow()\n\n```\n\nFrom the command line you can run: ```python -m atari_zoo.activation_movie --algo rainbow --environment PongNoFrameskip-v4 --run_id 1 --output ./pong_rainbow1_activation.mp4```\n\n## Notebooks\n\nExample jupyter notebooks live in the notebook directory that give further examples of how this library can be used.\n\nA [starter colab notebook](https://colab.research.google.com/github/uber-research/atari-model-zoo/blob/master/colab/AtariZooColabDemo.ipynb) enables you to check out the library without downloading and installing it.\n\n## Web tools\n\n* A tool for viewing videos of trained agents is available [here](https://uber-research.github.io/atari-model-zoo/video.html); note that it is possible to link to specific videos,\ne.g. [https://uber-research.github.io/atari-model-zoo/video.html?algo=apex&game=Seaquest&tag=final&run=2](https://uber-research.github.io/atari-model-zoo/video.html?algo=apex&game=Seaquest&tag=final&run=2).\n\n* A tool for viewing videos of trained agents alongside their neural activations is available [here](https://uber-research.github.io/atari-model-zoo/video2.html).\n\n## Source code for training algorithms that produced zoo models\n\nWe trained four algorithms ourselves:\n\n* [A2C](https://arxiv.org/abs/1602.01783) - we used the [baselines package from OpenAI](https://github.com/openai/baselines)\n* [GA](https://arxiv.org/abs/1712.06567) - we used the [fast GPU implementation version released by Uber](https://github.com/uber-research/deep-neuroevolution)\n* [ES](https://arxiv.org/abs/1703.03864) - we used the [fast GPU version released by Uber](https://github.com/uber-research/deep-neuroevolution)\n* [Ape-X](https://arxiv.org/abs/1803.00933) - we used the [replication released by Uber](https://github.com/uber-research/ape-x)\n* [IMPALA](https://arxiv.org/abs/1802.01561) - we used the [released code from DeepMind](https://github.com/deepmind/scalable_agent)\n\nWe took trained final models from two algorithms (DQN and Rainbow) from the [Dopamine model release](https://ai.googleblog.com/2018/08/introducing-new-framework-for-flexible.html):\n\n* [DQN](https://arxiv.org/abs/1312.5602) - [implementation here](https://github.com/google/dopamine)\n* [Rainbow](https://arxiv.org/abs/1710.02298) - [implementation here](https://github.com/google/dopamine)\n\n## Citation\n\nTo cite this work in publications, please use the following BibTex entry:\n\n```\n@inproceedings{\ntitle = {An Atari Model Zoo for Analyzing, Visualizing, and Comparing Deep Reinforcement Learning Agents},\nauthor = {Felipe Such, Vashish Madhavan, Rosanne Liu, Rui Wang, Pablo Castro, Yulun Li, Jiale Zhi, Ludwig Schubert, Marc G. Bellemare, Jeff Clune, Joel Lehman},\nbooktitle = {Proceedings of IJCAI 2019},\nyear = {2019},\n}\n```\n\n## Contact Information\n\nFor questions, comments, and suggestions, email [joel.lehman@uber.com](mailto:mailto:joel.lehman@uber.com).\n"
  },
  {
    "path": "atari_zoo/__init__.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\n\nrun_cnt = {'apex':3,'ga':3,'es':3,'a2c':3,'rainbow':5,'dqn':5,'impala':3}\n\nanalysis_subset_games = ['AmidarNoFrameskip-v4', 'AssaultNoFrameskip-v4', 'AsterixNoFrameskip-v4', 'AsteroidsNoFrameskip-v4', 'AtlantisNoFrameskip-v4','EnduroNoFrameskip-v4', 'FrostbiteNoFrameskip-v4', 'GravitarNoFrameskip-v4', 'KangarooNoFrameskip-v4',\"SeaquestNoFrameskip-v4\",'SkiingNoFrameskip-v4','VentureNoFrameskip-v4','ZaxxonNoFrameskip-v4']\n\ngame_list = ['AlienNoFrameskip-v4', 'AmidarNoFrameskip-v4', 'AssaultNoFrameskip-v4', 'AsterixNoFrameskip-v4', 'AsteroidsNoFrameskip-v4', 'AtlantisNoFrameskip-v4', 'BankHeistNoFrameskip-v4', 'BattleZoneNoFrameskip-v4', 'BeamRiderNoFrameskip-v4', 'BerzerkNoFrameskip-v4', 'BowlingNoFrameskip-v4', 'BoxingNoFrameskip-v4', 'BreakoutNoFrameskip-v4', 'CentipedeNoFrameskip-v4', 'ChopperCommandNoFrameskip-v4', 'CrazyClimberNoFrameskip-v4', 'DemonAttackNoFrameskip-v4', 'DoubleDunkNoFrameskip-v4', 'EnduroNoFrameskip-v4', 'FishingDerbyNoFrameskip-v4', 'FreewayNoFrameskip-v4', 'FrostbiteNoFrameskip-v4', 'GopherNoFrameskip-v4', 'GravitarNoFrameskip-v4', 'HeroNoFrameskip-v4', 'IceHockeyNoFrameskip-v4', 'JamesbondNoFrameskip-v4', 'KangarooNoFrameskip-v4', 'KrullNoFrameskip-v4', 'KungFuMasterNoFrameskip-v4', 'MontezumaRevengeNoFrameskip-v4', 'MsPacmanNoFrameskip-v4', 'NameThisGameNoFrameskip-v4', 'PhoenixNoFrameskip-v4', 'PitfallNoFrameskip-v4', 'PongNoFrameskip-v4', 'PrivateEyeNoFrameskip-v4', 'QbertNoFrameskip-v4', 'RiverraidNoFrameskip-v4', 'RoadRunnerNoFrameskip-v4', 'RobotankNoFrameskip-v4', 'SeaquestNoFrameskip-v4', 'SkiingNoFrameskip-v4', 'SolarisNoFrameskip-v4', 'SpaceInvadersNoFrameskip-v4', 'StarGunnerNoFrameskip-v4', 'TennisNoFrameskip-v4', 'TimePilotNoFrameskip-v4', 'TutankhamNoFrameskip-v4', 'UpNDownNoFrameskip-v4', 'VentureNoFrameskip-v4', 'VideoPinballNoFrameskip-v4', 'WizardOfWorNoFrameskip-v4', 'YarsRevengeNoFrameskip-v4', 'ZaxxonNoFrameskip-v4']\n\ngame_action_counts = {'DemonAttackNoFrameskip-v4': 6, 'BowlingNoFrameskip-v4': 6, 'QbertNoFrameskip-v4': 6, 'GopherNoFrameskip-v4': 8, 'PongNoFrameskip-v4': 6, 'BattleZoneNoFrameskip-v4': 18, 'VideoPinballNoFrameskip-v4': 9, 'FrostbiteNoFrameskip-v4': 18, 'BeamRiderNoFrameskip-v4': 9, 'YarsRevengeNoFrameskip-v4': 18, 'RoadRunnerNoFrameskip-v4': 18, 'JamesbondNoFrameskip-v4': 18, 'GravitarNoFrameskip-v4': 18, 'IceHockeyNoFrameskip-v4': 18, 'FishingDerbyNoFrameskip-v4': 18, 'BerzerkNoFrameskip-v4': 18, 'CrazyClimberNoFrameskip-v4': 9, 'ChopperCommandNoFrameskip-v4': 18, 'WizardOfWorNoFrameskip-v4': 10, 'ZaxxonNoFrameskip-v4': 18, 'AlienNoFrameskip-v4': 18, 'PitfallNoFrameskip-v4': 18, 'KrullNoFrameskip-v4': 18, 'KangarooNoFrameskip-v4': 18, 'BankHeistNoFrameskip-v4': 18, 'SpaceInvadersNoFrameskip-v4': 6, 'RobotankNoFrameskip-v4': 18, 'AmidarNoFrameskip-v4': 10, 'EnduroNoFrameskip-v4': 9, 'AsterixNoFrameskip-v4': 9, 'MontezumaRevengeNoFrameskip-v4': 18, 'VentureNoFrameskip-v4': 18, 'DoubleDunkNoFrameskip-v4': 18, 'KungFuMasterNoFrameskip-v4': 14, 'TimePilotNoFrameskip-v4': 10, 'CentipedeNoFrameskip-v4': 18, 'BreakoutNoFrameskip-v4': 4, 'SeaquestNoFrameskip-v4': 18, 'PhoenixNoFrameskip-v4': 8, 'FreewayNoFrameskip-v4': 3, 'AtlantisNoFrameskip-v4': 4, 'PrivateEyeNoFrameskip-v4': 18, 'NameThisGameNoFrameskip-v4': 6, 'TutankhamNoFrameskip-v4': 8, 'TennisNoFrameskip-v4': 18, 'AssaultNoFrameskip-v4': 7, 'SolarisNoFrameskip-v4': 18, 'StarGunnerNoFrameskip-v4': 18, 'AsteroidsNoFrameskip-v4': 14, 'SkiingNoFrameskip-v4': 3, 'HeroNoFrameskip-v4': 18, 'BoxingNoFrameskip-v4': 18, 'MsPacmanNoFrameskip-v4': 9, 'UpNDownNoFrameskip-v4': 6, 'RiverraidNoFrameskip-v4': 18}\n\ngame_action_meanings = {'AsteroidsNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE'], 'SkiingNoFrameskip-v4': ['NOOP', 'RIGHT', 'LEFT'], 'AtlantisNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHTFIRE', 'LEFTFIRE'], 'BoxingNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'IceHockeyNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'DoubleDunkNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'StarGunnerNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'RoadRunnerNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'TutankhamNoFrameskip-v4': ['NOOP', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE'], 'MontezumaRevengeNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'AsterixNoFrameskip-v4': ['NOOP', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT'], 'BowlingNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'DOWN', 'UPFIRE', 'DOWNFIRE'], 'PongNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'GravitarNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'KungFuMasterNoFrameskip-v4': ['NOOP', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'DOWNRIGHT', 'DOWNLEFT', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'AssaultNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'SeaquestNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'PhoenixNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'DOWN', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE'], 'RiverraidNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'UpNDownNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'DOWN', 'UPFIRE', 'DOWNFIRE'], 'FreewayNoFrameskip-v4': ['NOOP', 'UP', 'DOWN'], 'WizardOfWorNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE'], 'EnduroNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'DOWN', 'DOWNRIGHT', 'DOWNLEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'PrivateEyeNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'BattleZoneNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'BankHeistNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'VentureNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'TimePilotNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE'], 'ZaxxonNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'CentipedeNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'PitfallNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'BerzerkNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'BreakoutNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT'], 'NameThisGameNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'CrazyClimberNoFrameskip-v4': ['NOOP', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT'], 'JamesbondNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'TennisNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'ChopperCommandNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'AlienNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'AmidarNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE'], 'QbertNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN'], 'MsPacmanNoFrameskip-v4': ['NOOP', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT'], 'FrostbiteNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'DemonAttackNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'KangarooNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'VideoPinballNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE'], 'RobotankNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'SolarisNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'HeroNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'FishingDerbyNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'GopherNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE'], 'BeamRiderNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'UPRIGHT', 'UPLEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'SpaceInvadersNoFrameskip-v4': ['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE'], 'KrullNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE'], 'YarsRevengeNoFrameskip-v4': ['NOOP', 'FIRE', 'UP', 'RIGHT', 'LEFT', 'DOWN', 'UPRIGHT', 'UPLEFT', 'DOWNRIGHT', 'DOWNLEFT', 'UPFIRE', 'RIGHTFIRE', 'LEFTFIRE', 'DOWNFIRE', 'UPRIGHTFIRE', 'UPLEFTFIRE', 'DOWNRIGHTFIRE', 'DOWNLEFTFIRE']}\n\nfrom atari_zoo.model_maker import MakeAtariModel\n"
  },
  {
    "path": "atari_zoo/activation_movie.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport argparse\nimport numpy as np\nimport moviepy.editor as mpy\nfrom moviepy.video.io.ffmpeg_writer import FFMPEG_VideoWriter\nimport gym\nfrom lucid.optvis.render import import_model\nfrom atari_zoo import MakeAtariModel\nfrom atari_zoo.utils import get_session\nfrom atari_zoo.utils import conv_activations_to_canvas\nfrom atari_zoo.utils import fc_activations_to_canvas\nfrom atari_zoo.utils import get_activation_scaling\nimport tensorflow as tf\n\ndef gather_activations(m,obs,activations_tensor,session,X_t,batch_size=200,add_observations=True):\n    #gather activations over entire trajectory\n    obs_idx = 0\n    length = obs.shape[0]\n\n    collected_reps = []\n\n    while obs_idx < length:\n        rep = session.run(activations_tensor,{X_t:obs[obs_idx:obs_idx+batch_size]})\n        collected_reps.append(rep)\n        obs_idx += batch_size\n\n    #collate representations\n    compiled_rep = {}\n    for layer in range(len(rep)):\n        collected = np.vstack([r[layer] for r in collected_reps])\n        #print(collected.shape)\n        layer_name = m.layers[layer]['name']\n        compiled_rep[layer_name] = collected\n\n    return compiled_rep\n\ndef activations_to_frames(m,activations):\n    obs_idx = 0\n    frames = []\n    length = activations.shape[0]\n\n    if len(activations.shape)==4:\n        scaling = get_activation_scaling(m,activations)\n\n    for obs_idx in range(length):\n        if len(activations.shape)==4:\n            frame = conv_activations_to_canvas(m,activations,padding=1,idx=obs_idx,scaling=scaling)\n        elif len(activations.shape)==2:\n            frame = fc_activations_to_canvas(m,activations,padding=1,idx=obs_idx)  \n        frames.append(frame)\n    return frames\n\ndef make_clips_from_activations(m,_frames,obs,activations_tensor,session,X_t,fps=60):\n    clip_dict = {}\n    activations = gather_activations(m,obs,activations_tensor=activations_tensor,\n                                     session=session,X_t=X_t,batch_size=1)\n    \n    for layer_idx in range(len(m.layers)):\n        layer_name = m.layers[layer_idx]['name']\n        print(layer_name)\n        frames = activations_to_frames(m,activations[layer_name])\n        clip = mpy.ImageSequenceClip([frame*255 for frame in frames], fps=60)\n        clip_dict[layer_name] = clip\n        \n    #create observation movie\n    n_obs = m.native_activation_representation(obs)\n    frames = activations_to_frames(m,n_obs)\n    clip = mpy.ImageSequenceClip([frame*255 for frame in frames], fps=fps)\n    clip_dict['observations'] = clip\n    \n    #create raw rollout movie\n    clip = mpy.ImageSequenceClip([frame for frame in _frames], fps=60)\n    clip_dict['frames'] = clip\n    \n    return clip_dict\n\ndef side_by_side_clips(clip1,clip2):\n    #calculate size of background canvas\n    total_size_x = clip1.size[0] + clip2.size[0]\n    total_size_y = max(clip1.size[1],clip2.size[1])\n\n    #create background canvas\n    bg_clip = mpy.ColorClip(size=(total_size_x,total_size_y), color=(255,255,255))\n\n    duration = clip2.duration\n\n    #align clips on canvas\n    clip1=clip1.set_position(pos=(0,\"center\"))\n    clip2=clip2.set_position(pos=((total_size_x-clip2.size[0],\"center\")))\n\n    clip_list = [bg_clip,clip1,clip2]\n\n    #composite together\n    cc = mpy.CompositeVideoClip(clip_list,(total_size_x,total_size_y)).subclip(0,duration)\n    return cc\n    \n\ndef _MakeActivationVideoOneLayer(m,clip_dict,layer_no):\n    labels = [\"conv1\",\"conv2\",\"conv3\",\"fc\",\"output\"]\n    scales = [1.5,2.0,2.0,0.5,1.5]\n\n    #get game frames\n    clip1 = clip_dict['frames']\n\n    #get activations from one layer\n    layer_name = m.layers[layer_no]['name']\n    clip2 = clip_dict[layer_name]\n    clip2_scale = scales[layer_no]\n    clip2 = clip2.resize(clip2_scale)\n    return side_by_side_clips(clip1,clip2)\n\n\ndef _MakeActivationVideo(m,clip_dict):\n    composite_size = (550,1000)\n\n    clip_list = []\n    clip_list.append(mpy.ColorClip(size=composite_size, color=(255,255,255)))\n\n    labels = [\"obs\",\"conv1\",\"conv2\",\"conv3\",\"fc\",\"output\"]\n    scales = [1.0, 1.5,2.0,2.0,0.5,1.5]\n\n    x_pos = 350\n    y_pos = 25\n    padding = 50\n    label_fontsize = 20\n\n    layers = m.layers.copy()\n    layers.insert(0,{'name':'observations'})\n\n    for layer_idx in range(len(labels)):\n        layer_name = layers[layer_idx]['name']\n    \n        #get clip and resize it\n        clip = clip_dict[layer_name]\n        clip = clip.resize(scales[layer_idx])\n    \n        #calculate where to place it\n        _x_pos = x_pos - 0.5 * clip.size[0]\n        _y_pos = y_pos\n        clip = clip.set_position((_x_pos,_y_pos))\n    \n        txtClip = mpy.TextClip(labels[layer_idx],color='black', fontsize=label_fontsize)\n        txtPos = (x_pos - 0.5 * txtClip.size[0],y_pos - txtClip.size[1])\n        clip_list.append(txtClip.set_position(txtPos))\n    \n        #offset coordinates\n        y_pos += clip.size[1]\n        y_pos += padding\n        clip_list.append(clip)\n    \n    duration = clip.duration\n\n    clip_list.append(clip_dict['frames'].set_position((50,580)))\n    #clip_list.append(clip_dict['observations'].set_position((0,50)))\n\n    cc = mpy.CompositeVideoClip(clip_list,composite_size).subclip(0,duration)\n    #cc.ipython_display()\n    return cc \n\n\"\"\"\nTake a model and create a dictionary of MoviePy clips\nfor all the activations of the NN given a cached evaluation.\n\"\"\"\ndef MakeClipDict(m):\n    tf.reset_default_graph()\n\n    m.load_graphdef()\n    m.import_graph()\n    obs = m.get_observations()\n    frames = m.get_frames()\n    \n    #get a tf session\n    session = get_session()\n\n    #create a placeholder input to the network\n    X_t = tf.placeholder(tf.float32, [None] + m.image_shape)\n\n    #now get access to a dictionary that grabs output layers from the model\n    T = import_model(m,X_t,X_t)\n    activations = [T(layer['name']) for layer in m.layers]\n    \n    clip_dict = make_clips_from_activations(m,frames,obs,activations,session=session,X_t=X_t,fps=60)\n\n    return clip_dict\n\n\"\"\"\nTake a model and a layer number (0=conv1,1=conv2,2=conv3) and\ngenerate a side-by-side video of agent and activations on that\nlayer.\n\"\"\"\ndef MakeActivationVideoOneLayer(m,layer_no,out_file=None):\n    clip_dict = MakeClipDict(m)\n    clip = _MakeActivationVideoOneLayer(m,clip_dict,layer_no)\n\n    if out_file!=None:\n        clip.write_videofile(out_file)\n\n    return clip\n    \n\n\n\"\"\"\nTake a model m and generate a side-by-side video of agent and activations \n\"\"\"\ndef MakeActivationVideo(m,video_fn=None):\n    clip_dict = MakeClipDict(m)\n    clip = _MakeActivationVideo(m,clip_dict)\n\n    if video_fn!=None:\n        clip.write_videofile(video_fn)\n\n    return clip\n\ndef main():\n    \"\"\"\n    Generates an activation movie for a rollout with a particular model\n    \"\"\"\n\n    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--algo', help='choose from [es, a2c, dqn]', type=str,default=\"ga\")\n    parser.add_argument('--environment', type=str,default=\"SeaquestNoFrameskip-v4\")\n    parser.add_argument('--run_id',type=int,default=1)\n    parser.add_argument('--output', type=str, default=\"output.mp4\")\n\n    args = parser.parse_args()\n    \n    m = MakeAtariModel(args.algo,args.environment,args.run_id)()\n\n    cc = MakeActivationVideo(m)\n    cc.write_videofile(args.output)\n\nif __name__==\"__main__\":\n    main()\n"
  },
  {
    "path": "atari_zoo/atari_wrappers.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport numpy as np\nfrom collections import deque\nfrom PIL import Image\nimport gym\nfrom gym import spaces\nimport tensorflow as tf\nfrom pdb import set_trace as bb\n\nclass NoopResetEnv(gym.Wrapper):\n    def __init__(self, env, noop_max=30):\n        \"\"\"Sample initial states by taking random number of no-ops on reset.\n        No-op is assumed to be action 0.\n        \"\"\"\n        gym.Wrapper.__init__(self, env)\n        self.noop_max = noop_max\n        self.override_num_noops = None\n        assert env.unwrapped.get_action_meanings()[0] == 'NOOP'\n\n    def reset(self):\n        \"\"\" Do no-op action for a number of steps in [1, noop_max].\"\"\"\n        self.env.reset()\n        if self.override_num_noops is not None:\n            noops = self.override_num_noops\n        else:\n            noops = self.unwrapped.np_random.randint(1, self.noop_max + 1) #pylint: disable=E1101\n        assert noops > 0\n        obs = None\n        for _ in range(noops):\n            obs, _, done, _ = self.env.step(0)\n            if done:\n                obs = self.env.reset()\n        return obs\n\nclass FireResetEnv(gym.Wrapper):\n    def __init__(self, env):\n        \"\"\"Take action on reset for environments that are fixed until firing.\"\"\"\n        gym.Wrapper.__init__(self, env)\n        assert env.unwrapped.get_action_meanings()[1] == 'FIRE'\n        assert len(env.unwrapped.get_action_meanings()) >= 3\n\n    def reset(self):\n        self.env.reset()\n        obs, _, done, _ = self.env.step(1)\n        if done:\n            self.env.reset()\n        obs, _, done, _ = self.env.step(2)\n        if done:\n            self.env.reset()\n        return obs\n\nclass EpisodicLifeEnv(gym.Wrapper):\n    def __init__(self, env):\n        \"\"\"Make end-of-life == end-of-episode, but only reset on true game over.\n        Done by DeepMind for the DQN and co. since it helps value estimation.\n        \"\"\"\n        gym.Wrapper.__init__(self, env)\n        self.lives = 0\n        self.was_real_done  = True\n\n    def step(self, action):\n        obs, reward, done, info = self.env.step(action)\n        self.was_real_done = done\n        # check current lives, make loss of life terminal,\n        # then update lives to handle bonus lives\n        lives = self.env.unwrapped.ale.lives()\n        if lives < self.lives and lives > 0:\n            # for Qbert somtimes we stay in lives == 0 condtion for a few frames\n            # so its important to keep lives > 0, so that we only reset once\n            # the environment advertises done.\n            done = True\n        self.lives = lives\n        return obs, reward, done, info\n\n    def reset(self):\n        \"\"\"Reset only when lives are exhausted.\n        This way all states are still reachable even though lives are episodic,\n        and the learner need not know about any of this behind-the-scenes.\n        \"\"\"\n        if self.was_real_done:\n            obs = self.env.reset()\n        else:\n            # no-op step to advance from terminal/lost life state\n            obs, _, _, _ = self.env.step(0)\n        self.lives = self.env.unwrapped.ale.lives()\n        return obs\n\nclass MaxAndSkipEnv(gym.Wrapper):\n    def __init__(self, env, skip=4):\n        \"\"\"Return only every `skip`-th frame\"\"\"\n        gym.Wrapper.__init__(self, env)\n        # most recent raw observations (for max pooling across time steps)\n        self._obs_buffer = deque(maxlen=2)\n        self._skip       = skip\n        self.viewer = None\n\n    def step(self, action):\n        \"\"\"Repeat action, sum reward, and max over last observations.\"\"\"\n        total_reward = 0.0\n        done = None\n        for _ in range(self._skip):\n            obs, reward, done, info = self.env.step(action)\n            self._obs_buffer.append(obs)\n            total_reward += reward\n            if done:\n                break\n        max_frame = np.max(np.stack(self._obs_buffer), axis=0)\n\n        return max_frame, total_reward, done, info\n\n    def reset(self):\n        \"\"\"Clear past frame buffer and init. to first obs. from inner env.\"\"\"\n        self._obs_buffer.clear()\n        obs = self.env.reset()\n        self._obs_buffer.append(obs)\n        return obs\n\n    def _render(self, mode='human', close=False):\n        if close:\n            return\n        if mode == 'human':\n            from gym.envs.classic_control import rendering\n            if self.viewer is None:\n                self.viewer = rendering.SimpleImageViewer()\n            self.viewer.imshow(np.max(np.stack(self._obs_buffer), axis=0))\n            return np.max(np.stack(self._obs_buffer), axis=0)\n        else:\n            return np.max(np.stack(self._obs_buffer), axis=0)\n\n# class ClipRewardEnv(gym.RewardWrapper):\n#     def _reward(self, reward):\n#         \"\"\"Bin reward to {+1, 0, -1} by its sign.\"\"\"\n#         return np.sign(reward)\n\n\n\nclass WarpFrameTF(gym.ObservationWrapper):\n    def __init__(self, env, show_warped=False,warp_size=(84,84)):\n        \"\"\"Warp frames to 84x84 as done in the Nature paper and later work.\"\"\"\n        gym.ObservationWrapper.__init__(self, env)\n        self.res = 84\n        self.observation_space = spaces.Box(low=0, high=255, shape=(self.res, self.res, 1))\n        self.viewer = None\n        self.show_warped = show_warped\n\n        self.inp_shape = [None]+list(env.observation_space.shape[:2])+[1,]\n        self.x_t = tf.placeholder(tf.float32, self.inp_shape,name='warp_ph')\n        self.warp_size = warp_size\n        self.transform_op = self.transform(self.x_t)\n\n    def transform(self,obs):\n        obs = tf.image.resize_bilinear(obs, self.warp_size, align_corners=True)\n        obs = tf.reshape(obs, self.warp_size + (1,))\n        return obs\n\n\n    def observation(self, obs):\n        frame = np.dot(obs.astype('float32'), np.array([0.299, 0.587, 0.114], 'float32'))\n        frame = frame[np.newaxis,:]\n        frame = frame[...,np.newaxis]\n\n        return self.transform_op.eval({self.x_t:frame}) \n\n    def _render(self, mode='human', close=False):\n        if close:\n            return\n        if mode == 'human' and self.show_warped:\n            from gym.envs.classic_control import rendering\n            if self.viewer is None:\n                self.viewer = rendering.SimpleImageViewer()\n            img = self.observation(self.env._render('rgb_array', close)) * np.ones([1, 1, 3], dtype=np.uint8)\n            self.viewer.imshow(img)\n            return img\n        else:\n            return self.env._render(mode, close)\n\n\nclass WarpFrame(gym.ObservationWrapper):\n    def __init__(self, env, show_warped=False):\n        \"\"\"Warp frames to 84x84 as done in the Nature paper and later work.\"\"\"\n        gym.ObservationWrapper.__init__(self, env)\n        self.res = 84\n        self.observation_space = spaces.Box(low=0, high=255, shape=(self.res, self.res, 1))\n        self.viewer = None\n        self.show_warped = show_warped\n\n    def observation(self, obs):\n        frame = np.dot(obs.astype('float32'), np.array([0.299, 0.587, 0.114], 'float32'))\n        frame = np.array(Image.fromarray(frame).resize((self.res, self.res),\n            resample=Image.BILINEAR), dtype=np.uint8)\n        return frame.reshape((self.res, self.res, 1))\n\n    def _render(self, mode='human', close=False):\n        if close:\n            return\n        if mode == 'human' and self.show_warped:\n            from gym.envs.classic_control import rendering\n            if self.viewer is None:\n                self.viewer = rendering.SimpleImageViewer()\n            img = self.observation(self.env._render('rgb_array', close)) * np.ones([1, 1, 3], dtype=np.uint8)\n            self.viewer.imshow(img)\n            return img\n        else:\n            return self.env._render(mode, close)\n\nclass FrameStack(gym.Wrapper):\n    def __init__(self, env, k):\n        \"\"\"Buffer observations and stack across channels (last axis).\"\"\"\n        gym.Wrapper.__init__(self, env)\n        self.k = k\n        self.frames = deque([], maxlen=k)\n        shp = env.observation_space.shape\n        assert shp[2] == 1  # can only stack 1-channel frames\n        self.observation_space = spaces.Box(low=0, high=255, shape=(shp[0], shp[1], k))\n\n    def reset(self):\n        \"\"\"Clear buffer and re-fill by duplicating the first observation.\"\"\"\n        ob = self.env.reset()\n        for _ in range(self.k): self.frames.append(ob)\n        return self.observation()\n\n    def step(self, action):\n        ob, reward, done, info = self.env.step(action)\n        self.frames.append(ob)\n        return self.observation(), reward, done, info\n\n    def observation(self):\n        assert len(self.frames) == self.k\n        return np.concatenate(self.frames, axis=2)\n\nclass ScaledFloatFrame(gym.ObservationWrapper):\n    def __init__(self,env,scale=(1/255.0)):\n        gym.ObservationWrapper.__init__(self, env)\n        self.scale = scale\n    def observation(self, obs):\n    # careful! This undoes the memory optimization, use\n    # with smaller replay buffers only.\n        return np.array(obs).astype(np.float32) * self.scale\n\nclass DiscretizeActions(gym.Wrapper):\n    def __init__(self, env):\n        \"\"\"Buffer observations and stack across channels (last axis).\"\"\"\n        gym.Wrapper.__init__(self, env)\n        self.temp_action = env.action_space\n        self.action_space = spaces.Discrete(5 ** int(np.prod(env.action_space.shape)))\n\n    def step(self, action):\n        cont_action = self.temp_action.low.copy()\n        for i in range(cont_action.size):\n            cont_action[i] += (self.temp_action.high[i] - self.temp_action.low[i]) * float(int(action) % 5) / 4.0\n            action = int(action / 5)\n        return self.env.step(cont_action)\n\n\n# def wrap_deepmind(env, episode_life=True, clip_rewards=True):\ndef wrap_deepmind(env, episode_life=False, skip=4, stack_frames=4, noop_max=30, noops=None, show_warped=False,preproc='tf'):\n    \"\"\"Configure environment for DeepMind-style Atari.\n\n    Note: this does not include frame stacking!\"\"\"\n    import gym.envs.atari\n    if isinstance(env.unwrapped, gym.envs.atari.AtariEnv):\n        if episode_life:\n            env = EpisodicLifeEnv(env)\n        env = NoopResetEnv(env, noop_max=noop_max)\n        if noops:\n            env.override_num_noops = noops\n        if skip > 1:\n            assert 'NoFrameskip' in env.spec.id  # required for DeepMind-style skip\n            env = MaxAndSkipEnv(env, skip=4)\n        if 'FIRE' in env.unwrapped.get_action_meanings():\n            env = FireResetEnv(env)\n    if preproc=='np':\n        env = WarpFrame(env, show_warped=show_warped)\n    elif preproc=='tf':\n        env = WarpFrameTF(env, show_warped=show_warped)\n    #elif preproc=='dopamine':\n    #    env = DopamineAtariPreprocessing(env)\n    # if clip_rewards:\n    #     env = ClipRewardEnv(env)\n    if stack_frames > 1:\n        env = FrameStack(env, stack_frames)\n    env = ScaledFloatFrame(env)\n    return env\n"
  },
  {
    "path": "atari_zoo/config.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\ndef dopamine_url_formatter(base_url,agent,game,run,tag=None):\n    game_proc = game.split(\"NoFrameskip\")[0]\n    return \"gs://download-dopamine-rl/lucid/{agent}/{game}/{run}/graph_def.pb\".format(agent=agent,game=game_proc,run=run)\n\n\n#remote lookup table\ndatadir_remote_dict = {'apex':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/apex\",\n                         'es':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/es\",\n                         'ga':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/ga\",\n                         'a2c':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c\",\n                         'rainbow':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow\",\n                       'dqn':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/dqn\",\n                       'impala':\"https://dgqeqexrlnkvd.cloudfront.net/zoo/impala\"}\n\nurl_formatter_dict = {('rainbow','remote'):dopamine_url_formatter,('dqn','remote'):dopamine_url_formatter}\n\n\n#local lookup table\ndatadir_local_dict = {'apex':\"/space/rlzoo/apex\",\n                        'es':\"/space/rlzoo/es\",\n                        'ga':\"/space/rlzoo/ga\",\n                        'a2c':'/space/rlzoo/a2c',\n                        'rainbow':'/space/rlzoo/rainbow',\n                        'dqn':'/space/rlzoo/dqn',\n                      'impala':'/space/rlzoo/impala' }\n\ndebug = True\n"
  },
  {
    "path": "atari_zoo/dopamine_preprocessing.py",
    "content": "# Modifications Copyright (c) 2018 Uber Technologies, Inc.\n\n# Copyright 2018 The Dopamine Authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"A class implementing minimal Atari 2600 preprocessing.\n\nThis includes:\n  . Emitting a terminal signal when losing a life (optional).\n  . Frame skipping and color pooling.\n  . Resizing the image before it is provided to the agent.\n\"\"\"\n\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nfrom gym.spaces.box import Box\nimport numpy as np\nimport cv2\n\n#@gin.configurable\n\nclass AtariPreprocessing(object):\n  \"\"\"A class implementing image preprocessing for Atari 2600 agents.\n\n  Specifically, this provides the following subset from the JAIR paper\n  (Bellemare et al., 2013) and Nature DQN paper (Mnih et al., 2015):\n\n    * Frame skipping (defaults to 4).\n    * Terminal signal when a life is lost (off by default).\n    * Grayscale and max-pooling of the last two frames.\n    * Downsample the screen to a square image (defaults to 84x84).\n\n  More generally, this class follows the preprocessing guidelines set down in\n  Machado et al. (2018), \"Revisiting the Arcade Learning Environment:\n  Evaluation Protocols and Open Problems for General Agents\".\n  \"\"\"\n\n  def __init__(self, environment, frame_skip=4, terminal_on_life_loss=False,\n               screen_size=84):\n    \"\"\"Constructor for an Atari 2600 preprocessor.\n\n    Args:\n      environment: Gym environment whose observations are preprocessed.\n      frame_skip: int, the frequency at which the agent experiences the game.\n      terminal_on_life_loss: bool, If True, the step() method returns\n        is_terminal=True whenever a life is lost. See Mnih et al. 2015.\n      screen_size: int, size of a resized Atari 2600 frame.\n\n    Raises:\n      ValueError: if frame_skip or screen_size are not strictly positive.\n    \"\"\"\n    if frame_skip <= 0:\n      raise ValueError('Frame skip should be strictly positive, got {}'.\n                       format(frame_skip))\n    if screen_size <= 0:\n      raise ValueError('Target screen size should be strictly positive, got {}'.\n                       format(screen_size))\n\n    self.environment = environment\n    self.unwrapped = environment\n    self.terminal_on_life_loss = terminal_on_life_loss\n    self.frame_skip = frame_skip\n    self.screen_size = screen_size\n\n    obs_dims = self.environment.observation_space\n    # Stores temporary observations used for pooling over two successive\n    # frames.\n    self.screen_buffer = [\n        np.empty((obs_dims.shape[0], obs_dims.shape[1]), dtype=np.uint8),\n        np.empty((obs_dims.shape[0], obs_dims.shape[1]), dtype=np.uint8)\n    ]\n\n    self.game_over = False\n    self.lives = 0  # Will need to be set by reset().\n\n  @property\n  def observation_space(self):\n    # Return the observation space adjusted to match the shape of the processed\n    # observations.\n    return Box(low=0, high=255, shape=(self.screen_size, self.screen_size, 1),\n               dtype=np.uint8)\n\n  @property\n  def action_space(self):\n    return self.environment.action_space\n\n  @property\n  def reward_range(self):\n    return self.environment.reward_range\n\n  @property\n  def metadata(self):\n    return self.environment.metadata\n\n  def reset(self):\n    \"\"\"Resets the environment.\n\n    Returns:\n      observation: numpy array, the initial observation emitted by the\n        environment.\n    \"\"\"\n    self.environment.reset()\n    self.lives = self.environment.ale.lives()\n    self._fetch_grayscale_observation(self.screen_buffer[0])\n    self.screen_buffer[1].fill(0)\n    return self._pool_and_resize()\n\n  def render(self, mode):\n    \"\"\"Renders the current screen, before preprocessing.\n\n    This calls the Gym API's render() method.\n\n    Args:\n      mode: Mode argument for the environment's render() method.\n        Valid values (str) are:\n          'rgb_array': returns the raw ALE image.\n          'human': renders to display via the Gym renderer.\n\n    Returns:\n      if mode='rgb_array': numpy array, the most recent screen.\n      if mode='human': bool, whether the rendering was successful.\n    \"\"\"\n    return self.environment.render(mode)\n\n  def step(self, action):\n    \"\"\"Applies the given action in the environment.\n\n    Remarks:\n\n      * If a terminal state (from life loss or episode end) is reached, this may\n        execute fewer than self.frame_skip steps in the environment.\n      * Furthermore, in this case the returned observation may not contain valid\n        image data and should be ignored.\n\n    Args:\n      action: The action to be executed.\n\n    Returns:\n      observation: numpy array, the observation following the action.\n      reward: float, the reward following the action.\n      is_terminal: bool, whether the environment has reached a terminal state.\n        This is true when a life is lost and terminal_on_life_loss, or when the\n        episode is over.\n      info: Gym API's info data structure.\n    \"\"\"\n    accumulated_reward = 0.\n\n    for time_step in range(self.frame_skip):\n      # We bypass the Gym observation altogether and directly fetch the\n      # grayscale image from the ALE. This is a little faster.\n      _, reward, game_over, info = self.environment.step(action)\n      accumulated_reward += reward\n\n      if self.terminal_on_life_loss:\n        new_lives = self.environment.ale.lives()\n        is_terminal = game_over or new_lives < self.lives\n        self.lives = new_lives\n      else:\n        is_terminal = game_over\n\n      if is_terminal:\n        break\n      # We max-pool over the last two frames, in grayscale.\n      elif time_step >= self.frame_skip - 2:\n        t = time_step - (self.frame_skip - 2)\n        self._fetch_grayscale_observation(self.screen_buffer[t])\n\n    # Pool the last two observations.\n    observation = self._pool_and_resize()\n\n    self.game_over = game_over\n    return observation, accumulated_reward, is_terminal, info\n\n  def _fetch_grayscale_observation(self, output):\n    \"\"\"Returns the current observation in grayscale.\n\n    The returned observation is stored in 'output'.\n\n    Args:\n      output: numpy array, screen buffer to hold the returned observation.\n\n    Returns:\n      observation: numpy array, the current observation in grayscale.\n    \"\"\"\n    self.environment.ale.getScreenGrayscale(output)\n    return output\n\n  def _pool_and_resize(self):\n    \"\"\"Transforms two frames into a Nature DQN observation.\n\n    For efficiency, the transformation is done in-place in self.screen_buffer.\n\n    Returns:\n      transformed_screen: numpy array, pooled, resized screen.\n    \"\"\"\n    # Pool if there are enough screens to do so.\n    if self.frame_skip > 1:\n      np.maximum(self.screen_buffer[0], self.screen_buffer[1],\n                 out=self.screen_buffer[0])\n\n    transformed_image = cv2.resize(self.screen_buffer[0],\n                                   (self.screen_size, self.screen_size),\n                                   interpolation=cv2.INTER_AREA)\n    int_image = np.asarray(transformed_image, dtype=np.uint8)\n    return np.expand_dims(int_image, axis=2)\n"
  },
  {
    "path": "atari_zoo/game_lists/a2c_game_list",
    "content": "AirRaidNoFrameskip-v4\nAlienNoFrameskip-v4\nAmidarNoFrameskip-v4\nAssaultNoFrameskip-v4\nAsterixNoFrameskip-v4\nAsteroidsNoFrameskip-v4\nAtlantisNoFrameskip-v4\nBankHeistNoFrameskip-v4\nBattleZoneNoFrameskip-v4\nBeamRiderNoFrameskip-v4\nBerzerkNoFrameskip-v4\nBowlingNoFrameskip-v4\nBoxingNoFrameskip-v4\nBreakoutNoFrameskip-v4\nCarnivalNoFrameskip-v4\nCentipedeNoFrameskip-v4\nChopperCommandNoFrameskip-v4\nCrazyClimberNoFrameskip-v4\nDemonAttackNoFrameskip-v4\nDoubleDunkNoFrameskip-v4\nElevatorActionNoFrameskip-v4\nEnduroNoFrameskip-v4\nFishingDerbyNoFrameskip-v4\nFreewayNoFrameskip-v4\nFrostbiteNoFrameskip-v4\nGopherNoFrameskip-v4\nGravitarNoFrameskip-v4\nHeroNoFrameskip-v4\nIceHockeyNoFrameskip-v4\nJamesbondNoFrameskip-v4\nJourneyEscapeNoFrameskip-v4\nKangarooNoFrameskip-v4\nKrullNoFrameskip-v4\nKungFuMasterNoFrameskip-v4\nMontezumaRevengeNoFrameskip-v4\nMsPacmanNoFrameskip-v4\nNameThisGameNoFrameskip-v4\nPhoenixNoFrameskip-v4\nPitfallNoFrameskip-v4\nPongNoFrameskip-v4\nPooyanNoFrameskip-v4\nPrivateEyeNoFrameskip-v4\nQbertNoFrameskip-v4\nRiverraidNoFrameskip-v4\nRoadRunnerNoFrameskip-v4\nRobotankNoFrameskip-v4\nSeaquestNoFrameskip-v4\nSkiingNoFrameskip-v4\nSolarisNoFrameskip-v4\nSpaceInvadersNoFrameskip-v4\nStarGunnerNoFrameskip-v4\nTennisNoFrameskip-v4\nTimePilotNoFrameskip-v4\nTutankhamNoFrameskip-v4\nUpNDownNoFrameskip-v4\nVentureNoFrameskip-v4\nVideoPinballNoFrameskip-v4\nWizardOfWorNoFrameskip-v4\nYarsRevengeNoFrameskip-v4\nZaxxonNoFrameskip-v4\n"
  },
  {
    "path": "atari_zoo/game_lists/apex_game_list",
    "content": "alien\namidar\nassault\nasterix\nasteroids\natlantis\nbank_heist\nbattle_zone\nbeam_rider\nberzerk\nbowling\nboxing\nbreakout\ncentipede\nchopper_command\ncrazy_climber\ndemon_attack\ndouble_dunk\nenduro\nfishing_derby\nfreeway\nfrostbite\ngopher\ngravitar\nhero\nice_hockey\njamesbond\nkangaroo\nkrull\nkung_fu_master\nmontezuma_revenge\nms_pacman\nname_this_game\nphoenix\npitfall\npong\nprivate_eye\nqbert\nriverraid\nroad_runner\nrobotank\nseaquest\nskiing\nsolaris\nspace_invaders\nstar_gunner\ntennis\ntime_pilot\ntutankham\nup_n_down\nventure\nvideo_pinball\nwizard_of_wor\nyars_revenge\nzaxxon\n"
  },
  {
    "path": "atari_zoo/game_lists/dopamine_game_list",
    "content": "AirRaid\nAlien\nAmidar\nAssault\nAsterix\nAsteroids\nAtlantis\nBankHeist\nBattleZone\nBeamRider\nBerzerk\nBowling\nBoxing\nBreakout\nCarnival\nCentipede\nChopperCommand\nCrazyClimber\nDemonAttack\nDoubleDunk\nElevatorAction\nEnduro\nFishingDerby\nFreeway\nFrostbite\nGopher\nGravitar\nHero\nIceHockey\nJamesbond\nJourneyEscape\nKangaroo\nKrull\nKungFuMaster\nMontezumaRevenge\nMsPacman\nNameThisGame\nPhoenix\nPitfall\nPong\nPooyan\nPrivateEye\nQbert\nRiverraid\nRoadRunner\nRobotank\nSeaquest\nSkiing\nSolaris\nSpaceInvaders\nStarGunner\nTennis\nTimePilot\nTutankham\nUpNDown\nVenture\nVideoPinball\nWizardOfWor\nYarsRevenge\nZaxxon\n"
  },
  {
    "path": "atari_zoo/log.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport numpy as np\nimport pandas as pd\nimport json\nimport atari_zoo\nfrom atari_zoo.utils import load_json_from_url\n\n#TODO: Potentially refactor into class structure\n\n\"\"\"\nHelper function to parse checkpoint log to expose available 'tagged' checkpoints and their information\n\"\"\"\ndef parse_checkpoint_info(json_data):\n    ckt_points = {}\n    for entry in json_data:\n        tag = entry['criteria']\n        if entry['best_checkpoint']!=None:\n            ckt_points[tag]=entry['best_checkpoint']\n    return ckt_points\n\n\"\"\"\nLoad checkpoint json file from path, where\npath can be either a local address or a web\naddress\n\"\"\"\ndef load_checkpoint_info(path):\n        fname = path+\".json\"\n\n        if(fname.find('http')!=-1):\n            return load_json_from_url(fname)\n        else:\n            return json.load(open(fname))\n\n\"\"\"\nHelper function to transform json log format to pandas data frames for plotting\n\"\"\"\ndef get_dataframe_from_training_log(_data=None,_file=None,algo='default',run=1):\n    if(not _data):\n        log = json.load(_file)\n    else:\n        log = _data\n    \n    assert len(log)>0\n    \n    column_names = log[0].keys()\n    data_dict = {}\n\n    for column in column_names:\n        data_dict[column] = []\n            \n    for entry in log:\n        for key in column_names:\n            data_dict[key].append(entry[key])\n            \n    data_dict['algo'] = [algo] * len(log)\n    data_dict['run'] = [run] * len(log)\n            \n    df = pd.DataFrame(data_dict)\n    \n    if 'initial' in column_names:\n        df = df[df['initial']==0]\n        \n    df = df.sort_values(by=['time'])\n\n    \"\"\"\n    clean-up stage: some Ape-X runs were restarted from checkpoints\n    due to a network outage. which creates a big timedelta that needs \n    to be cleaned up: i.e. \n    \"\"\"\n    clean=False\n    threshold = 60*60*3 #assume >3 hour gap means restart\n\n    while not clean:\n        clean=True\n\n        time_diffs = np.diff(df['time'])\n        if np.max(time_diffs)>threshold:\n            clean=False\n            idx = np.argmax(time_diffs)\n            amt = np.max(time_diffs)\n\n            #TODO: use loc instead (don't operate on copy)\n            #df['time'][idx+1:]-=amt\n            df.loc[idx+1:,('time')]-=amt\n    \n    return df\n\n\"\"\"\nHelper function to gather logs for runs of a particular algo/game combo\n\"\"\"\ndef gather_logs_across_runs(algo,game,runs,local=False):\n    results = []\n\n    for run in runs:\n        k= atari_zoo.MakeAtariModel(algo,game,run,local=local)()\n        log = k.get_log()\n        results.append(get_dataframe_from_training_log(_data=log,algo=algo,run=run))\n\n    df = pd.concat(results)\n    return df\n\n\n\"\"\"\nHelper function to gather logs across algorithms for a particular game\n\"\"\"\ndef gather_logs_across_algos(algos,game,local=False):\n    results = []\n\n    for algo in algos:\n        results.append(gather_logs_across_runs(algo,game,range(1,atari_zoo.run_cnt[algo]+1),local=local))\n\n    df = pd.concat(results)\n\n    return df\n\n\nif __name__=='__main__':\n    import seaborn as sns\n    from pylab import *\n    algo = \"apex\"\n    game = \"AmidarNoFrameskip-v4\"\n    \n    \"\"\"\n    apex_df = gather_logs_across_runs(\"apex\",game,range(1,6),local=True)\n    ga_df = gather_logs_across_runs(\"ga\",game,range(1,6),local=True)\n    a2c_df = gather_logs_across_runs(\"a2c\",game,range(1,4),local=True)\n    es_df = gather_logs_across_runs(\"es\",game,range(1,4),local=True)\n\n    df = pd.concat((apex_df,ga_df,a2c_df,es_df))\n    \"\"\"\n\n    df = gather_logs_across_algos(['apex','ga','a2c','es'],game,local=True)\n\n    sns.lineplot(x=\"time\", y=\"score\",\n                              style=\"run\", hue='algo',\n                              data=df)\n\n    show()\n"
  },
  {
    "path": "atari_zoo/model_maker.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\n\n# Contains wrapper classes over Lucid that enable loading frozen graphs\n# into the Lucid framework\nimport json\nimport lucid\nfrom lucid.modelzoo.vision_base import Model\nfrom lucid.misc.io.loading import load\nfrom lucid.misc.io.reading import read, local_cache_path\nimport tensorflow as tf\nimport numpy as np\nfrom pdb import set_trace as bb\nimport atari_zoo.config\nfrom atari_zoo.config import datadir_local_dict,datadir_remote_dict,url_formatter_dict \nfrom atari_zoo import game_action_counts \nfrom atari_zoo.utils import *\nimport atari_zoo.log\n\n\n\"\"\"\nBasic RL model class that extends Lucid's Model class\n\nImplements extra methods:\n\nget_observations (Loads precomputed observations if they exist)\nget_frames (Loads precomputed RGB frames if they exist)\nget_ram (loads precomputed 128-integer RAM snapshots if they exist)\nram_state_to_bits (change 128-integer RAM into 1024-bit RAM)\n\nImplements additional class variables:\nchannel_order: \"NHWC\" or \"NCHW\"\npreprocess_style: 'tf' for tensorflow preprocessing, 'np' for numpy, 'dopamine' for dopamine-style\n\"\"\"\nclass RL_model(Model):\n    channel_order = \"NHWC\" #typical channel order\n    dataset = 'RL'\n    valid_run_range = (1,3)\n\n    #if the model exposes other interesting layers\n    #e.g. A2C exposes a value and a policy head\n    additional_layers = {}\n\n    #minutae -- whether atari preprocessing is done in\n    #tensorflow or numpy; only difference is in implmentation\n    #details of bilinear filtering downsampling; but of course\n    #RL agents overfit to it!\n    #\n    #tf = tensorflow; np = numpy\n    preprocess_style = 'tf'\n\n    image_shape = [84, 84, 4]\n    input_scale = 1.0\n    image_value_range = (0, 1) \n    input_name = 'X_t'\n    ph_type = 'float32'\n\n    \"\"\" \n    overwrite input creating function to handle different\n    datatypes; Dopamine models want uint8 placeholders\n    \"\"\"\n    def create_input(self, t_input=None, forget_xy_shape=True):\n        if t_input == None and self.ph_type=='uint8':\n            t_input = tf.placeholder(tf.uint8,self.image_shape)\n\n        #return super().create_input(t_input,forget_xy_shape)\n        return super(RL_model,self).create_input(t_input,forget_xy_shape)\n\n    #TODO integrate these file loads with Lucid's cache mechanism\n    def get_log(self):\n        fname = self.log_path+\"_log.json\"\n\n        if(fname.find('http')!=-1):\n            return load_json_from_url(fname)\n        else:\n            return json.load(open(fname))\n\n    def get_checkpoint_info(self):\n        return atari_zoo.log.load_checkpoint_info(self.log_path)\n\n    def get_observations(self):\n        fname = self.data_path\n        return load(fname)['observations']\n\n    def get_frames(self):\n        fname = self.data_path\n        return load(fname)['frames']\n\n    def get_ram(self):\n        fname = self.data_path\n        return load(fname)['ram']\n\n    def get_scores(self):\n        fname = self.data_path\n        return load(fname)['score']\n\n    def get_representation(self):\n        fname = self.data_path\n        return load(fname)['representation']\n\n    def get_episode_rewards(self):\n        fname = self.data_path\n        return load(fname)['ep_rewards']\n\n    #TODO make more efficent\n    def ram_state_to_bits(self,state):\n        binary = ['{0:08b}'.format(k) for k in state]\n        binary = ''.join(binary)\n        return binary\n\n    #what processing must be done to extract the\n    #right distribution of actions from the output\n    #of the network\n    def get_action(self,model):\n        raise NotImplementedError\n\n    #transform weight tensor to be of canonical style\n    def preprocess_weight(self,x):\n        #default is identity\n        return x\n   \n    #grab weights from model given current session \n    def get_weights(self,session,layer_no):\n        weights_name = self.weights[layer_no]['name']\n        weights = session.graph.get_tensor_by_name(\"import/%s:0\" % weights_name)\n        weights = self.preprocess_weight(weights)\n        return session.run(weights)\n\n    #transform activations into canonical tensor\n    def canonical_activation_representation(self,act):\n        if self.channel_order=='NHWC':\n            return act\n        else:\n            #print(\"Current:\",act.shape)\n            return np.transpose(act,axes=[0,2,3,1])\n\n    #transform activations into canonical tensor\n    def native_activation_representation(self,act):\n        if self.channel_order=='NHWC':\n            return act\n        else:\n            return np.transpose(act,axes=[0,3,1,2])\n  \n#OpenAI's evolution strategy algorithm\nclass RL_ES(RL_model):\n  weights = [\n      {'name':'es/layer1/conv1/w'},\n      {'name':'es/layer2/conv2/w'},\n      {'name':'es/layer3/conv3/w'},\n  ]\n\n  layers = [\n     {'type': 'conv', 'name': 'es/layer1/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'es/layer2/Relu', 'size': 64},\n     {'type': 'conv', 'name': 'es/layer3/Relu', 'size': 64},\n     {'type': 'dense', 'name': 'es/layer4/Relu', 'size': 512},\n     {'type': 'dense', 'name': 'es/layer5/out/out', 'size':18}\n   ]\n\n  def preprocess_weight(self,x):\n      return x[0]\n\n  def get_action(self,model):\n        policy = model(self.layers[-1]['name']) \n        action_sample = tf.argmax(policy, axis=-1)\n        return action_sample\n\n#Uber's Deep GA\nclass RL_GA(RL_model):\n  layers = [\n     {'type': 'conv', 'name': 'ga/conv1/relu', 'size': 32},\n     {'type': 'conv', 'name': 'ga/conv2/relu', 'size': 64},\n     {'type': 'conv', 'name': 'ga/conv3/relu', 'size': 64},\n     {'type': 'dense', 'name': 'ga/fc/relu', 'size': 512},\n     {'type': 'dense', 'name': 'ga/out/signal', 'size':18}\n   ]\n\n  weights = [\n      {'name':'ga/conv1/w'},\n      {'name':'ga/conv2/w'},\n      {'name':'ga/conv3/w'},\n  ]\n\n  def get_action(self,model):\n        policy = model(self.layers[-1]['name'])\n        action_sample = tf.argmax(policy, axis=-1)\n        return action_sample\n\n  def preprocess_weight(self,x):\n      return x[0]\n\n#Ape-X (recent high-performing DQN variant)\nclass RL_Apex(RL_model):\n  channel_order = \"NCHW\"\n\n  #note: action_value/Relu also worth considering...\n  layers = [\n     {'type': 'conv', 'name': 'deepq/q_func/convnet/Conv/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'deepq/q_func/convnet/Conv_1/Relu', 'size': 64},\n     {'type': 'conv', 'name': 'deepq/q_func/convnet/Conv_2/Relu', 'size': 64},\n      {'type': 'dense', 'name': 'deepq/q_func/state_value/Relu', 'size': 512},\n     {'type': 'dense', 'name': 'deepq/q_func/q_values', 'size':18}\n   ]\n\n  weights = [\n      {'name':'deepq/q_func/convnet/Conv/weights'},\n      {'name':'deepq/q_func/convnet/Conv_1/weights'},\n      {'name':'deepq/q_func/convnet/Conv_2/weights'}\n  ]\n \n  def get_action(self,model):\n        policy = model(self.layers[-1]['name']) #\"a2c/policy/BiasAdd\")\n        action_sample = tf.argmax(policy, axis=-1)\n        return action_sample\n\n#DQN from dopamine model dump\nclass RL_DQN_dopamine(RL_model):\n  #ph_type = 'uint8'\n  input_scale = 255.0\n  preprocess_style = 'dopamine'\n  image_value_range = (0, 255) \n  input_name = 'Online/Cast'\n  valid_run_range = (1,3)\n\n  weights = [\n      {'name':'Online/Conv/weights'},\n      {'name':'Online/Conv_1/weights'},\n      {'name':'Online/Conv_2/weights'}\n  ]\n\n  layers = [\n     {'type': 'conv', 'name': 'Online/Conv/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'Online/Conv_1/Relu', 'size': 64},\n     {'type': 'conv', 'name': 'Online/Conv_2/Relu', 'size': 64},\n     {'type': 'dense', 'name': 'Online/fully_connected/Relu', 'size': 512},\n     {'type': 'dense', 'name': 'Online/fully_connected_1/BiasAdd', 'size':18}\n   ]\n \n  def get_action(self,model):\n        policy = model(self.layers[-1]['name']) \n        action_sample = tf.argmax(policy, axis=1)\n        return action_sample\n\n  def get_log(self):\n    raise NotImplementedError\n      #Integration with Dopamine log formatting not yet complete.\"\n\n  def get_checkpoint_info(self):\n    raise NotImplementedError\n       #,\"Dopamine models include only the final checkpoint.\"\n\n#Rainbow (slightly older high-performing DQN variant)\nclass RL_Rainbow_dopamine(RL_model):\n  #ph_type = 'uint8'\n  valid_run_range = (1,5)\n  preprocess_style = 'dopamine'\n  input_scale = 255.0\n  image_value_range = (0, 255) \n  #input_name = 'state_ph'\n  input_name = 'Online/Cast'\n\n  weights = [\n      {'name':'Online/Conv/weights'},\n      {'name':'Online/Conv_1/weights'},\n      {'name':'Online/Conv_2/weights'}\n  ]\n\n  layers = [\n     {'type': 'conv', 'name': 'Online/Conv/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'Online/Conv_1/Relu', 'size': 64},\n     {'type': 'conv', 'name': 'Online/Conv_2/Relu', 'size': 64},\n     {'type': 'dense', 'name': 'Online/fully_connected/Relu', 'size': 512},\n     #{'type': 'dense', 'name': 'Online/fully_connected_1/BiasAdd', 'size':18}\n     {'type': 'dense', 'name': 'Online/Sum', 'size':18}\n   ]\n\n  additional_layers={'c51':{'type':'dense','name': 'Online/fully_connected_1/BiasAdd', 'size':18*51}}\n\n \n  def get_action(self,model):\n        policy = model(self.layers[-1]['name'])\n        action_sample = tf.argmax(policy, axis=1)\n        return action_sample\n\n  def get_log(self):\n    raise NotImplementedError\n    #\"Integration with Dopamine log formatting not yet complete.\"\n\n  def get_checkpoint_info(self):\n    raise NotImplementedError\n    #\"Dopamine models include only the final checkpoint.\"\n\n#A2C -- policy gradient algorithm\nclass RL_A2C(RL_model):\n  weights = [\n      {'name':'a2c/conv1/weights'},\n      {'name':'a2c/conv2/weights'},\n      {'name':'a2c/conv3/weights'}\n  ]\n\n  layers = [\n     {'type': 'conv', 'name': 'a2c/conv1/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'a2c/conv2/Relu', 'size': 64},\n     {'type': 'conv', 'name': 'a2c/conv3/Relu', 'size': 64},\n     {'type': 'dense', 'name': 'a2c/fc/Relu', 'size': 512},\n     #TODO: enable accesing a2c's value head as well! \n     #{'type': 'dense', 'name': 'a2c/value/BiasAdd', 'size':18},\n     {'type': 'dense', 'name': 'a2c/policy/BiasAdd', 'size':18}\n   ]\n  \n  def get_action(self,model):\n        policy = model(self.layers[-1]['name']) \n        rand_u = tf.random_uniform(tf.shape(policy))\n        action_sample = tf.argmax(policy - tf.log(-tf.log(rand_u)), axis=-1)\n        return action_sample\n\nclass RL_IMPALA(RL_model):\n  input_name = 'agent_1/agent/unroll/batch_apply/truediv'\n  preprocess_style = 'np'\n\n  weights = [\n      {'name':'agent/batch_apply/convnet/conv_2d/w'},\n      {'name':'agent/batch_apply/convnet/conv_2d_1/w'},\n      {'name':'agent/batch_apply/convnet/conv_2d_2/w'},\n  ]\n\n  layers = [\n     {'type': 'conv', 'name': 'agent_1/agent/unroll/batch_apply/convnet/Relu', 'size': 32},\n     {'type': 'conv', 'name': 'agent_1/agent/unroll/batch_apply/convnet/Relu_1', 'size': 64},\n     {'type': 'conv', 'name': 'agent_1/agent/unroll/batch_apply/convnet/Relu_2', 'size': 64},\n     {'type': 'dense', 'name': 'agent_1/agent/unroll/batch_apply/Relu', 'size': 512},\n     {'type': 'dense', 'name': 'agent_1/agent/unroll/batch_apply_1/policy_logits/add', 'size': 18},\n   ]\n\n  def get_action(self,model):\n        policy_logits = model(self.layers[-1]['name'])\n        new_action = tf.multinomial(policy_logits, num_samples=1,\n                output_dtype=tf.int32)\n        new_action = tf.squeeze(new_action, 1, name='new_action')\n        return new_action\n\n### Instantiate concrete models using python magic\nclass_map = {'ga':RL_GA,'es':RL_ES,'apex':RL_Apex,'a2c':RL_A2C,'dqn':RL_DQN_dopamine,'rainbow':RL_Rainbow_dopamine, 'impala':RL_IMPALA}\n\n#helper utility to make new python model classes\ndef _MakeAtariModel(model_class,name,environment,model_path,run_id,algorithm,log_path,data_path):\n    #find number of actions in this particular game\n    num_actions = game_action_counts[environment]\n\n    #change last layer size to reflect available actions\n    #layers = model_class.layers.copy()\n    layers = list(model_class.layers) #python2.7 compatibility\n    layers[-1]['size']=num_actions\n\n    #create inherited class with correct properties (hack?)\n    return type('Atari'+name,(model_class,),{'model_path':model_path,'environment':environment,'layers':layers,'run_id':run_id,'algorithm':algorithm,'log_path':log_path,'data_path':data_path})\n\n\"\"\"\nHelper function to get paths to model, rollout data, and log\nfor a particular algo/env/run combo\n\"\"\"\ndef GetFilePathsForModel(algo,environment,run_no,tag='final',local=False):\n\n    #if loading off of local disk (rare; only for development)\n    if local:\n        data_root = datadir_local_dict[algo]\n        if tag==None:\n            model_path = \"%s/%s/model%d.pb\" % (data_root,environment,run_no)\n            data_path = \"%s/%s/model%d_rollout.npz\" % (data_root,environment,run_no)\n        else:\n            model_path = \"%s/%s/model%d_%s.pb\" % (data_root,environment,run_no,tag)\n            data_path = \"%s/%s/model%d_%s_rollout.npz\" % (data_root,environment,run_no,tag)\n\n        log_path = \"%s/checkpoints/%s_%d\" % (data_root,environment,run_no)\n\n    #otherwise if loading off the canonical remote server (most common)\n    else:\n        data_root = datadir_remote_dict[algo]\n        if tag==None:\n            model_path = \"%s/%s/model%d.pb\" % (data_root,environment,run_no)\n            data_path = \"%s/%s/model%d_rollout.npz\" % (data_root,environment,run_no)\n        else:\n            model_path = \"%s/%s/model%d_%s.pb\" % (data_root,environment,run_no,tag)\n            data_path = \"%s/%s/model%d_%s_rollout.npz\" % (data_root,environment,run_no,tag)\n\n        if (algo,'remote') in url_formatter_dict:\n            model_path = url_formatter_dict[(algo,'remote')](data_root,algo,environment,run_no)\n   \n        log_path = \"%s/checkpoints/%s_%d\" % (data_root,environment,run_no)\n\n    return model_path,data_path,log_path\n\n\"\"\"\nFunction to query for available checkpoints for a model\n\"\"\"\ndef GetAvailableTaggedCheckpoints(algo,environment,run_no,local=False):\n    _,_,log_path = GetFilePathsForModel(algo,environment,run_no,local=local)\n    json_data = atari_zoo.log.load_checkpoint_info(log_path) \n    chkpoint_info = atari_zoo.log.parse_checkpoint_info(json_data)\n    return chkpoint_info\n\n\n\n\"\"\"\nFunction to load model from the model zoo\n\nalgo: Algorithm (ga,es,apex,a2c,dqn,rainbow)\nenvironment: Atari gym environment (e.g. SeaquestNoFrameskip-v4)\nrun_no: which run of the algorithm\ntag: which tag to search for (e.g. 1HR, human, 1B, final)\nlocal: boolean, whether to get the model from a local archive or from the remote server\n\"\"\"\ndef MakeAtariModel(algo,environment,run_no,tag='final',local=False):\n\n    model_path,data_path,log_path = GetFilePathsForModel(algo,environment,run_no,tag,local)\n\n    if atari_zoo.config.debug:\n        print('Model path:',model_path)\n        print('Data path:',data_path)\n        print('Log path:',log_path)\n\n    name = \"%s_%s_%d_%s\" % (algo,environment,run_no,tag)\n\n    model_class = class_map[algo]\n   \n    valid_run_range = model_class.valid_run_range\n    if run_no < valid_run_range[0] or run_no > valid_run_range[1]:\n        raise ValueError(\"Requested run %d out of range (%d,%d)\"%(run_no,valid_run_range[0],valid_run_range[1]))\n\n    return _MakeAtariModel(class_map[algo],name,environment,model_path,run_no,algo,log_path,data_path)\n\nif __name__=='__main__':\n    #easy!\n    Zaxxon_A2C = MakeAtariModel('rainbow','SeaquestNoFrameskip-v4',2,tag=\"final\",local=False)\n    model = Zaxxon_A2C()\n    model.load_graphdef()\n    model.import_graph()\n    print(\"Done\")\n"
  },
  {
    "path": "atari_zoo/rollout.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nfrom pdb import set_trace as bb\nimport argparse\n#from utils import *\n#from models import *\n#from ga_vis import create_ga_model \nimport pickle\n\nimport lucid\nfrom lucid.modelzoo.vision_base import Model\nfrom lucid.misc.io import show\nimport lucid.optvis.objectives as objectives\nimport lucid.optvis.param as param\nimport lucid.optvis.transform as transform\nimport lucid.optvis.render as render\nimport tensorflow as tf\n\nfrom atari_zoo import MakeAtariModel\nfrom lucid.optvis.render import import_model\nimport gym\nimport atari_zoo.atari_wrappers as atari_wrappers\nimport numpy as np\nimport random\nfrom atari_zoo.dopamine_preprocessing import AtariPreprocessing as DopamineAtariPreprocessing\t\nfrom atari_zoo.atari_wrappers import FireResetEnv, NoopResetEnv, MaxAndSkipEnv,WarpFrameTF,FrameStack,ScaledFloatFrame \n\nclass dotdict(dict):\n    \"\"\"dot.notation access to dictionary attributes\"\"\"\n    __getattr__ = dict.get\n    __setattr__ = dict.__setitem__\n    __delattr__ = dict.__delitem__\n\ndef generate_rollout(model,args=None,action_noise=0.0,parameter_noise=0.0,observation_noise=0.0,test_eps=1,max_frames=2500,min_frames=2500,output='',sticky_action_prob=0.0,render=False,cpu=False,streamline=False,verbose=False):\n\n    if args==None:\n        arg_dict = {'parameter_noise':parameter_noise,\n                    'observation_noise':observation_noise,\n                    'test_eps':test_eps,\n                    'max_frames':max_frames,\n                    'min_frames':min_frames,\n                    'output':output,\n                    'sticky_action_prob':sticky_action_prob,\n                    'render':render,\n                    'streamline':streamline,\n                    'action_noise':action_noise,\n                    'verbose':verbose\n                    }\n        args = dotdict(arg_dict)\n    \n    #from machado\n    sticky_action_prob = args.sticky_action_prob\n    \n    m = model \n\n    preprocessing = m.preprocess_style\n\n    m.load_graphdef()\n\n    #modify graphdef with gaussian noise\n    if args.parameter_noise > 0.0:\n        perturb_count = 0\n        layer_names = [z['name'] for z in m.weights]\n\n        #search for known-named nodes\n        for node in m.graph_def.node:\n            if node.name in layer_names:\n                #black magic\n                tensor = node.attr.get('value').tensor\n                array = np.frombuffer(tensor.tensor_content,np.float32).copy()\n                array += np.random.normal(0,args.parameter_noise,array.shape)\n                tensor.tensor_content = array.tobytes()\n                perturb_count+=1\n\n        #print(perturb_count)\n        #[n.name for n in m.graph_def.node if n.name.find(\"conv\")!=-1]\n        #bb()\n\n        #should hit 3 conv layers\n        assert perturb_count == 3\n\n    dev_cnt = 1\n    if args.cpu:\n        dev_cnt = 0\n    #for rollouts maybe don't use GPU?\n    config = tf.ConfigProto(\n            device_count = {'GPU': dev_cnt}\n        )\n    config.gpu_options.allow_growth=True\n\n    with tf.Graph().as_default() as graph, tf.Session(config=config) as sess:\n \n        if preprocessing == 'dopamine': #dopamine-style preprocessing\n            env = gym.make(m.environment)\n            if hasattr(env,'unwrapped'):\n                env = env.unwrapped\n            env = DopamineAtariPreprocessing(env)\n            env = FrameStack(env, 4)\n            env = ScaledFloatFrame(env,scale=1.0/255.0)\n        elif preprocessing == 'np': #use numpy preprocessing\n            env = gym.make(m.environment)\n            env = atari_wrappers.wrap_deepmind(env, episode_life=False,preproc='np')\n        else:  #use tensorflow preprocessing\n            env = gym.make(m.environment)\n            env = atari_wrappers.wrap_deepmind(env, episode_life=False,preproc='tf')\n\n        nA = env.action_space.n\n        X_t = tf.placeholder(tf.float32, [None] + list(env.observation_space.shape))\n\n        T = import_model(m,X_t,X_t)\n        action_sample = m.get_action(T)\n\n        #get intermediate level representations\n        activations = [T(layer['name']) for layer in m.layers]\n        high_level_rep = activations[-2] #not output layer, but layer before\n\n        sample_observations = []\n        sample_frames = []\n        sample_ram = []\n        sample_representation = []\n        sample_score = []\n\n        obs = env.reset()\n\n        ep_count = 0\n        rewards = []; ep_rew = 0.\n        frame_count = 0\n    \n        prev_action = None\n\n        # Evaluate policy over test_eps episodes\n        while ep_count < args.test_eps or frame_count<=args.min_frames:\n            if args.render:\n                env.render()\n\n            #potentially add observation noise\n            if args.observation_noise>0.0:\n                obs += np.random.normal(0,args.observation_noise,obs.shape)\n\n\n            train_dict = {X_t:obs[None]}\n            if streamline:\n                results = sess.run([action_sample], feed_dict=train_dict)\n                #grab action\n                act = results[0]\n            else:\n                results = sess.run([action_sample,high_level_rep], feed_dict=train_dict)\n\n                #grab action\n                act = results[0]\n\n                #get high-level representation\n                representation = results[1][0]\n\n            if not streamline:\n                frame = env.render(mode='rgb_array')\n                sample_frames.append(np.array(frame,dtype=np.uint8))\n                sample_ram.append(env.unwrapped._get_ram())\n                sample_representation.append(representation)\n                sample_observations.append(np.array(obs))\n\n            sample_score.append(ep_rew)\n\n            if args.action_noise >=0:\n                if random.random() < args.action_noise:\n                    act = random.randint(0,nA-1)\n\n            if prev_action != None and random.random() < sticky_action_prob:\n                act = prev_action\n\n            prev_action = act\n\n            obs, rew, done, info = env.step(np.squeeze(act))\n\n            ep_rew += rew\n            frame_count+=1\n\n            if frame_count >= args.max_frames:\n                done=True\n\n            if done:\n                obs = env.reset()\n                ep_count += 1\n                rewards.append(ep_rew)\n                ep_rew = 0.\n\n        if args.verbose:\n            print(\"Avg. Episode Reward: \", np.mean(rewards))\n            print(\"rewards:\",rewards)\n            print(\"frames:\",frame_count)\n\n        results = {'observations':sample_observations,'frames':sample_frames,'ram':sample_ram,'representation':sample_representation,'score':sample_score,'ep_rewards':rewards}\n\n        if args.output!='':\n            np.savez_compressed(args.output + \"_rollout\",**results)\n\n        return results \n\n\n#TODO wrap this as a function call, so you can do multiple rollouts\ndef main():\n    \"\"\"\n    Rolls out a model in the atari emulator -- can render it to screen, and also\n    can save out image and observation sequences.\n    \"\"\"\n    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--test_eps', help='number of test episodes', default=1, type=int)\n    parser.add_argument('--algo', help='choose from [es, a2c, dqn]', type=str)\n    parser.add_argument('--environment', type=str)\n    parser.add_argument('--run_id',type=int, default=1)\n    parser.add_argument('--render', action='store_true')\n    parser.add_argument('--output', type=str, default=\"\")\n    parser.add_argument('--max_frames', type=int, default=1e8)\n    parser.add_argument('--min_frames', type=int, default=0)\n    parser.add_argument('--observation_noise', type=float, default=0.0)\n    parser.add_argument('--parameter_noise', type=float, default=0.0)\n    parser.add_argument('--tag', type=str, default=None)\n    parser.add_argument('--cpu', action='store_true')\n    parser.add_argument('--streamline', action='store_true')\n    parser.add_argument('--local', action='store_true')\n    parser.add_argument('--sticky_action_prob', type=float,default=0.0)\n    parser.add_argument('--action_noise', type=float,default=0.0)\n    parser.add_argument('--verbose', action=\"store_true\")\n\n    #from machado\n    sticky_action_prob = 0.0\n\n    args = parser.parse_args()\n    \n    m = MakeAtariModel(args.algo,args.environment,args.run_id,tag=args.tag,local=args.local)()\n   \n    results = generate_rollout(model=m,args=args)\n\n    exit()\n\nif __name__==\"__main__\":\n    #generate_rollout(blah=\"blah2\")\n    main()\n"
  },
  {
    "path": "atari_zoo/scores.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nfrom atari_zoo.translate import translate_game_name\n\ndef get_random_agent_scores(game):\n    global random_play_scores\n\n    translated_name = translate_game_name(game,'canonical','apex')\n\n    return random_play_scores[translated_name]\n\ndef get_human_scores(game):\n    global human_scores\n\n    translated_name = translate_game_name(game,'canonical','apex')\n\n    return human_scores[translated_name]\n\nhuman_scores = {\n    \"alien\": 6875,\n    \"amidar\": 1676,\n    \"assault\": 1496,\n    \"asterix\": 8503,\n    \"asteroids\": 13157,\n    \"atlantis\": 29028,\n    \"bank_heist\": 734.4,\n    \"battle_zone\": 37800,\n    \"beam_rider\": 5775,\n    \"bowling\": 154.8,\n    \"boxing\": 4.3,\n    \"breakout\": 31.8,\n    \"centipede\": 11963,\n    \"chopper_command\": 9882,\n    \"crazy_climber\": 35411,\n    \"demon_attack\": 3401,\n    \"double_dunk\": -15.5,\n    \"enduro\": 309.6,\n    \"fishing_derby\": 5.5,\n    \"freeway\": 29.6,\n    \"frostbite\": 4335,\n    \"gopher\": 2321,\n    \"gravitar\": 2672,\n    \"hero\": 25763,\n    \"ice_hockey\": 0.9,\n    \"jamesbond\": 406.7,\n    \"kangaroo\": 3035,\n    \"krull\": 2395,\n    \"kung_fu_master\": 22736,\n    \"montezuma_revenge\": 4367,\n    \"ms_pacman\": 15693,\n    \"name_this_game\": 4076,\n    \"pong\": 9.3,\n    \"private_eye\": 69571,\n    \"qbert\": 13455,\n    \"riverraid\": 13513,\n    \"road_runner\": 7845,\n    \"robotank\": 11.9,\n    \"seaquest\": 20182,\n    \"space_invaders\": 1652,\n    \"star_gunner\": 10250,\n    \"tennis\": -8.9,\n    \"time_pilot\": 5925,\n    \"tutankham\": 167.6,\n    \"up_n_down\": 9082,\n    \"venture\": 1188,\n    \"video_pinball\": 17298,\n    \"wizard_of_wor\": 4757,\n    \"zaxxon\": 9173,\n}\n\nrandom_play_scores = {\n    \"alien\": 227.8,\n    \"amidar\": 5.8,\n    \"assault\": 222.4,\n    \"asterix\": 210,\n    \"asteroids\": 719.1,\n    \"atlantis\": 12850,\n    \"bank_heist\": 14.2,\n    \"battle_zone\": 2360,\n    \"beam_rider\": 363.9,\n    \"bowling\": 23.1,\n    \"boxing\": 0.1,\n    \"breakout\": 1.7,\n    \"centipede\": 2091,\n    \"chopper_command\": 811,\n    \"crazy_climber\": 10781,\n    \"demon_attack\": 152.1,\n    \"double_dunk\": -18.6,\n    \"enduro\": 0,\n    \"fishing_derby\": -91.7,\n    \"freeway\": 0,\n    \"frostbite\": 65.2,\n    \"gopher\": 257.6,\n    \"gravitar\": 173,\n    \"hero\": 1027,\n    \"ice_hockey\": -11.2,\n    \"jamesbond\": 29,\n    \"kangaroo\": 52,\n    \"krull\": 1598,\n    \"kung_fu_master\": 258.5,\n    \"montezuma_revenge\": 0,\n    \"ms_pacman\": 307.3,\n    \"name_this_game\": 2292,\n    \"pong\": -20.7,\n    \"private_eye\": 24.9,\n    \"qbert\": 163.9,\n    \"riverraid\": 1339,\n    \"road_runner\": 11.5,\n    \"robotank\": 2.2,\n    \"seaquest\": 68.4,\n    \"space_invaders\": 148,\n    \"skiing\":-16679.9,\n    \"star_gunner\": 664,\n    \"tennis\": -23.8,\n    \"time_pilot\": 3568,\n    \"tutankham\": 11.4,\n    \"up_n_down\": 533.4,\n    \"venture\": 0,\n    \"video_pinball\": 16257,\n    \"wizard_of_wor\": 563.5,\n    \"zaxxon\": 32.5,\n}\n\n"
  },
  {
    "path": "atari_zoo/synthetic_inputs.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport tensorflow as tf\nimport lucid\nimport atari_zoo\nfrom atari_zoo import MakeAtariModel\n\nfrom lucid.misc.io import show\nimport lucid.optvis.objectives as objectives\nimport lucid.optvis.param as param\nimport lucid.optvis.transform as transform\nimport lucid.optvis.render as render\n\nfrom lucid.optvis.param.color import to_valid_rgb\nfrom lucid.optvis.param.spatial import naive, fft_image\nimport pylab\nfrom lucid.optvis.objectives import wrap_objective, Objective\nimport matplotlib\nimport numpy as np\nfrom lucid.misc.io import load, save, show\nfrom lucid.misc.io.showing import images\n\n#call to create raw image\ndef image(shape, add_noise=False):\n  if add_noise:\n    raw_frames = lucid.optvis.param.spatial.naive(shape, sd=0.5)\n  else:\n    raw_frames = lucid.optvis.param.spatial.naive(shape)\n  processed_frames = tf.nn.sigmoid(raw_frames)\n  return processed_frames\n\n#if you want to only optimize current frame and leave past 3 frames to be zero\ndef only_current_frame(shape):\n    shape_1 = shape[:-1]+[1,]\n    \n    shape_2 = shape[:]\n    shape_2[-1] -= 1\n    \n    print(shape_1,shape_2)\n    \n    current_frame = lucid.optvis.param.spatial.naive(shape_1)\n    zero_frames = tf.zeros(shape_2)\n       \n    processed_current = tf.nn.sigmoid(current_frame)\n    processed_frames = tf.concat([zero_frames,processed_current],-1)\n    return processed_frames\n\n#create lucid objective functions that work with different channel orderings (\n@wrap_objective\ndef channel(layer, n_channel, ordering=\"NHWC\"):\n  \"\"\"Tensor-order aware version of channel lucid objective\"\"\"\n  if ordering=='NCHW':\n    return lambda T: tf.reduce_mean(tf.transpose(T(layer),perm=[0,2,3,1])[...,n_channel])\n  else:\n    return lambda T: tf.reduce_mean(T(layer)[..., n_channel])\n\n#an L2 penalty only for a specific channel of the input image\n@wrap_objective\ndef L2c(layer=\"input\", constant=0, epsilon=1e-6, batch=None,channel=0):\n  \"\"\"L2 norm of layer. Generally used as penalty.\"\"\"\n  if batch is None:\n    return lambda T: tf.sqrt(epsilon + tf.reduce_sum((T(layer)[...,channel] - constant) ** 2))\n  else:\n    return lambda T: tf.sqrt(epsilon + tf.reduce_sum((T(layer)[batch,...,channel] - constant) ** 2))\n\n@wrap_objective\ndef direction_cossim(layer, vec, ordering=\"NHWC\"):\n  \"\"\"Visualize a direction (cossine similarity)\"\"\"\n  def inner(T):\n    if ordering=='NCHW':\n        _layer = T(layer)\n    else:\n        _layer = tf.transpose(T(layer),perm=[0,2,3,1])\n        \n    act_mags = tf.sqrt(tf.reduce_sum(_layer**2, -1, keepdims=True))\n    vec_mag = tf.sqrt(tf.reduce_sum(vec**2))\n    \n    mags = act_mags * vec_mag\n    return tf.reduce_mean(_layer * vec.reshape([1, 1, 1, -1]) / mags)\n    \n  return inner\n\n@wrap_objective\ndef direction_neuroncossim(layer, vec, ordering=\"NHWC\"):\n  \"\"\"Visualize a direction (cossine similarity)\"\"\"\n  def inner(T):\n    if ordering=='NCHW':\n        _layer = T(layer)\n    else:\n        _layer = tf.transpose(T(layer),perm=[0,2,3,1])\n        \n    act_mags = tf.sqrt(tf.reduce_sum(_layer[:,5:6,5:6,:]**2, -1, keepdims=True))\n    vec_mag = tf.sqrt(tf.reduce_sum(vec**2))\n    \n    mags = act_mags * vec_mag\n    return tf.reduce_mean(_layer[:,5:6,5:6,:] * vec.reshape([1, 1, 1, -1]) / mags)\n    \n  return inner \n\n\ndef make_regularization(L1=0.0,L2=0.0,TV=0.0):\n    return -L1*objectives.L2()-L2*objectives.L2()-TV*objectives.total_variation()\n\n\ndef visualize_neuron(algo='apex',env='SeaquestNoFrameskip-v4',run_id=1,tag=\"final\",param_f=lambda: image([1,84,84,4]),do_render=False,\n                     transforms=[transform.jitter(3),],layer_no=0,neuron=0,regularization=0,**params):\n    tf.reset_default_graph()\n    \n    m = MakeAtariModel(algo,env,run_id,tag,local=False)()\n    m.load_graphdef()\n   \n    if(m.layers[layer_no]['type']=='dense'):\n        obj = objectives.channel(m.layers[layer_no]['name'],neuron)\n    else:\n        obj = channel(m.layers[layer_no]['name'],neuron,ordering=m.channel_order)\n\n    out = optimize_input(obj+regularization,m,param_f,transforms,do_render=do_render,**params)\n    return out\n\n\n#differentiable image parameterizations\nfrom tensorflow.contrib import slim\nimport numpy as np\n\n#CPPN setup\ndef composite_activation(x):\n  x = tf.atan(x)\n  # Coefficients computed by:\n  #   def rms(x):\n  #     return np.sqrt((x*x).mean())\n  #   a = np.arctan(np.random.normal(0.0, 1.0, 10**6))\n  #   print(rms(a), rms(a*a))\n  return tf.concat([x/0.67, (x*x)/0.6], -1)\n\n\ndef composite_activation_unbiased(x):\n  x = tf.atan(x)\n  # Coefficients computed by:\n  #   a = np.arctan(np.random.normal(0.0, 1.0, 10**6))\n  #   aa = a*a\n  #   print(a.std(), aa.mean(), aa.std())\n  return tf.concat([x/0.67, (x*x-0.45)/0.396], -1)\n\n\ndef relu_normalized(x):\n  x = tf.nn.relu(x)\n  # Coefficients computed by:\n  #   a = np.random.normal(0.0, 1.0, 10**6)\n  #   a = np.maximum(a, 0.0)\n  #   print(a.mean(), a.std())\n  return (x-0.40)/0.58\n\n\ndef image_cppn(\n    size,\n    num_output_channels=1,\n    num_hidden_channels=24,\n    num_layers=8,\n    activation_fn=composite_activation,\n    normalize=False):\n  r = 3.0**0.5  # std(coord_range) == 1.0\n  coord_range = tf.linspace(-r, r, size)\n  y, x = tf.meshgrid(coord_range, coord_range, indexing='ij')\n  net = tf.expand_dims(tf.stack([x, y], -1), 0)  # add batch dimension\n\n  with slim.arg_scope([slim.conv2d], kernel_size=1, activation_fn=None):\n    for i in range(num_layers):\n      in_n = int(net.shape[-1])\n      net = slim.conv2d(\n          net, num_hidden_channels,\n          # this is untruncated version of tf.variance_scaling_initializer\n          weights_initializer=tf.random_normal_initializer(0.0, np.sqrt(1.0/in_n)),\n      )\n      if normalize:\n        net = slim.instance_norm(net)\n      net = activation_fn(net)\n      \n    rgb = slim.conv2d(net, num_output_channels, activation_fn=tf.nn.sigmoid,\n                      weights_initializer=tf.zeros_initializer())\n  \n  return rgb\n\ndef render_feature(\n    cppn_f = lambda: image_cppn(84),\n    optimizer = tf.train.AdamOptimizer(0.001),\n    objective = objectives.channel('noname', 0),transforms=[]):\n  vis = render.render_vis(m, objective, param_f=cppn_f, optimizer=optimizer, transforms=transforms, thresholds=[2**i for i in range(5,10)], verbose=False)\n  #show(vis)\n  return vis\n\n#video rendering code...\nfrom lucid.misc.io.serialize_array import _normalize_array\nfrom lucid.misc.tfutil import create_session\nfrom moviepy.video.io.ffmpeg_writer import FFMPEG_VideoWriter\nfrom IPython.display import clear_output, Image, display, HTML\nimport moviepy.editor as mpy\nfrom lucid.modelzoo import vision_models\nfrom lucid.misc.io import show, save, load\nfrom lucid.optvis import objectives\nfrom lucid.optvis import render\n\n@wrap_objective\ndef all_activation(layer, batch=None):\n  \"\"\"Value of action minus average value of all actions\"\"\"\n  if batch is None:\n    return lambda T: tf.reduce_mean(T(layer))\n  else:\n    return lambda T: tf.reduce_mean(T(layer)[batch, ...])\n\ncppn_default_f = lambda: image_cppn( \n          size=84, num_layers=8,num_hidden_channels=16,normalize=True, \n          activation_fn=relu_normalized, num_output_channels=4)\n\n#composite_activation\n#relu_normalized\n#composite_activation_unbiased\ndef optimize_input(obj, model, param_f, transforms, lr=0.05, step_n=512,num_output_channels=4,do_render=False,out_name=\"out\"):\n\n  sess = create_session()\n\n  # Set up optimization problem\n  size = 84\n  t_size = tf.placeholder_with_default(size, [])\n  T = render.make_vis_T(\n      model, obj, \n      param_f=param_f,\n      transforms = transforms,\n      optimizer=tf.train.AdamOptimizer(lr),\n  )\n\n  tf.global_variables_initializer().run()\n \n  if do_render:\n      video_fn = out_name + '.mp4'\n      writer = FFMPEG_VideoWriter(video_fn, (size, size*4), 60.0)\n  \n  # Optimization loop\n  try:\n    for i in range(step_n):\n      _, loss, img = sess.run([T(\"vis_op\"), T(\"loss\"), T(\"input\")])\n\n      if do_render:\n          #if outputting only one channel...\n          if num_output_channels==1:\n              img=img[...,-1:] #print(img.shape)\n              img=np.tile(img,3)\n          else:\n              #img=img[...,-3:]        \n              img=img.transpose([0,3,1,2])\n              img=img.reshape([84*4,84,1])\n              img=np.tile(img,3)\n          writer.write_frame(_normalize_array(img))\n          if i > 0 and i % 50 == 0:\n              clear_output()\n              print(\"%d / %d  score: %f\"%(i, step_n, loss))\n              show(img)\n\n  except KeyboardInterrupt:\n    pass\n  finally:\n    if do_render:\n        print(\"closing...\")\n        writer.close()\n  \n  # Save trained variables\n  if do_render:\n      train_vars = sess.graph.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)\n      params = np.array(sess.run(train_vars), object)\n      save(params, out_name + '.npy')\n  \n      # Save final image\n      final_img = T(\"input\").eval({t_size: 600})[...,-1:] #change size\n      save(final_img, out_name+'.jpg', quality=90)\n\n  out = T(\"input\").eval({t_size: 84})\n  sess.close()\n  return out\n\n \n"
  },
  {
    "path": "atari_zoo/top_patches.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\n\n\n\n# Code to extract images patches that maximally activate particular neurons\n# in an Atari convnet. Note that right now this code is specifically fit\n# to the Atari convnet structure, and would need adaptation and generalization\n# to fit to arbitrary structures. This would likely be non-trivial because it\n# requires some reflection on the structure of the network (reasoning about\n# pooling / convs) to calculate receptive fields at particular layers, etc.\n\nimport sys\n\nimport tensorflow as tf\nimport lucid\nimport numpy as np\nimport atari_zoo\nfrom atari_zoo import MakeAtariModel\nfrom atari_zoo.rollout import generate_rollout\n\nfrom lucid.misc.io import show\nimport lucid.optvis.objectives as objectives\nimport lucid.optvis.param as param\nimport lucid.optvis.transform as transform\nimport lucid.optvis.render as render\n\nimport atari_zoo.utils\nfrom atari_zoo.utils import conv_activations_to_canvas\nfrom atari_zoo.utils import fc_activations_to_canvas\n\nfrom lucid.optvis.render import import_model\nfrom matplotlib.pyplot import *\n\n#from IPython import embed\n\n\n# receptive field at conv3 is 36\n# receptive field at conv2 is 20\n# receptive field at conv1 is 8 (8x8 conv...)\n\ndef pad_image(image, padSize, pad_values=0.):\n    \"\"\" \n    Function that pads an image on all 4 sides, each side having the same padding. \n    simulating the receptive field that can be larger than original image \n    image: shape (batch, h, w, c) or (h, w, c)\n    padSize: integer. Number of pixels to pad each side\n    pad_values: what value to pad it with \n    \n    \"\"\"\n    if len(image.shape) == 4: # (batch, h, w, c)\n        pads = ((0,0), (padSize,padSize),(padSize,padSize), (0,0))\n    elif len(image.shape) == 3: # (h, w, c)\n        pads = ((padSize,padSize),(padSize,padSize), (0,0))\n    else: \n        raise ValueError('Unsupported representation shape {}'.format(image.shape))\n    ret = np.pad(image, pads, 'constant', constant_values=pad_values)\n    return ret\n\ndef get_obs_patch(observation, ii, jj, receptive_stride=(36,8), pad_each_side=4+2*4+1*8,plot=False):\n    \"\"\" Function that get a patch from an observation matrix, according to \n    a (ii, jj) location at a layer higher up \n    observation: (batch, h, w, c), normally (batch, 84, 84, 4)\n    ii: integer index in the h dimension\n    jj: integer index in the w dimension\n    receptive_stride: a tuple of (receptive field size, stride size) indicating from this higher-up \n        layer where (ii, jj) is located, the size of receptive field and stride into the observation.\n        For networks used in this application, the three conv layers have, respectively, \n        (8,4), (20,8), (36,8)\n        onto the original observation.\n    pad_each_side: how much the observation should be padded, due to the fact that receptive field at\n        some point expand outside of the original image. Because there have been 3 layers of conv, having\n        filter sizes of 8, 4, and 3, strides of 2, 2, and 1. Under \"same\" padding as they do, the eventual\n        padding is 4 + 4*2 + 1*2*4 = 20\n    \"\"\"\n    repp = pad_image(observation, pad_each_side)  # pad to (112,112,4)\n    \n    (rec_size, stride) = receptive_stride\n\n    # the field to look at in observation\n    top = int(ii*stride-rec_size/2)\n    bot = int(ii*stride+rec_size/2)\n    left = int(jj*stride-rec_size/2)\n    right = int(jj*stride+rec_size/2)\n    #print('Before pad: ', top, bot, left, right)\n    print('bottom left location in original obs: ({},{})'.format(bot, left))\n    [new_top, new_bot, new_left, new_right] = [k+pad_each_side for k in [top,bot,left,right]]\n    #print('After pad: ', new_top, new_bot, new_left, new_right)\n    #figure(figsize=(10,4))\n    if plot:\n        for cc in range(observation.shape[-1]):\n            subplot(101+observation.shape[-1]*10+cc)\n            #print('bottom left location in padded obs: ({},{})'.format(bot+pad_each_side, left+pad_each_side))\n            matshow(repp[new_top:new_bot,new_left:new_right,cc], fignum=0)\n    #print(repp[new_top:new_bot,new_left:new_right,cc].shape)\n    return repp[new_top:new_bot,new_left:new_right,observation.shape[-1]-1], (top, left)\n\ndef build_model_get_act(algo, env, run_id=1, tag='final', local=True, which_layer=2):\n    \"\"\" Function that builds/loads a model given algorithm algo and environment env, etc.,\n    and obtain activations at a specific layer.\n    which_layer: the index into layers. 0->Conv1, 1->Conv2, 2->Conv3, 3->FC\n    \"\"\"\n    # Activation map shapes: \n    # 0 Online/Conv/Relu (21, 21, 32)\n    # 1 Online/Conv_1/Relu (11, 11, 64)\n    # 2 Online/Conv_2/Relu (11, 11, 64)\n    # 3 Online/fully_connected/Relu (512)\n    # \n\n    #TODO\n    # load model\n    m = MakeAtariModel(algo, env, run_id, tag=tag)()\n    nA = atari_zoo.game_action_counts[env]\n    acts_shapes = [(0,21,21,32), (0,11,11,64), (0,11,11,64), (0,512),(0,nA)] \n    # getting frames, observations\n    obs = m.get_observations()\n    frames = m.get_frames()\n\n    # get the flow ready from observation the the layer activation you want\n    m.load_graphdef()\n    #get a tf session\n    session = atari_zoo.utils.get_session()\n    #create a placeholder input to the network\n    X_t = tf.placeholder(tf.float32, [None] + m.image_shape)\n    #now get access to a dictionary that grabs output layers from the model\n    T = import_model(m,X_t,X_t)\n    \n    # the activation tensor we want\n    acts_T = T(m.layers[which_layer]['name'])\n    try:\n        acts = session.run(acts_T, {X_t: obs})\n    except:\n        # some models does not allow batch size > 1 so do it one at a time\n        acts = np.empty(acts_shapes[which_layer])\n        for obs_1 in obs:\n            obs_1 = np.expand_dims(obs_1, axis=0)\n            #rep_1 = session.run(rep_layer_T, {X_t: obs_1})\n            rep_1 = session.run(acts_T, {X_t: obs_1})\n            acts = np.append(acts, rep_1, axis=0)\n    if m.channel_order=='NCHW':\n        acts = np.transpose(acts, axes=[0,2,3,1])\n\n    print('Layer {} {} activations obtained. Shape {}'.format(which_layer, \n                                m.layers[which_layer]['name'], acts.shape))   \n    return obs, acts, frames\n\ndef plot_topN_patches(activations, observations, which_filter=38, which_layer=2, which='top',n=3,plot=True):\n    \"\"\" Plot the things\n    activations: activations across all observations. e.g. (2501, 11, 11, 64)\n    which_filter: the filter of interest, integer between e.g. [0, 64) for conv3\n    Top 3 and Bottom 3 are determined by the activation vaules in activations\n    Plots are first on activations and then on specific observation patches\n    \"\"\"\n   \n    #last two are fc layers\n    receptive_stride = [(8,4), (20,8), (36,8),(84,0),(84,0)][which_layer]\n    pad_each_side = [4, 4+4*2, 4+4*2+1*8,0,0][which_layer]\n\n    # Find the maximum value in each channel of activation\n    acts_filter = activations[..., which_filter]  # e.g. (2501, 11, 11)\n    max_per_sample = []\n    for act in acts_filter:     # each (11,11)\n        max_per_sample.append(act.max())\n    max_per_sample = np.array(max_per_sample)  \n    top3 = max_per_sample.argsort()[::-1][:n]\n    #print(max_per_sample)\n    bot3 = max_per_sample.argsort()[:n]\n    rand3 = np.random.choice(len(max_per_sample), n)\n\n    if which.startswith('top'):\n        picks = top3\n    elif which.startswith('bot'):\n        picks = bot3\n    elif which.startswith('rand'):\n        picks = rand3\n    else:\n        raise ValueError('which={\"top\", \"bot\", \"rand\"}')\n\n    def plot_things(picks,plot=True):\n        patches = []\n        bottleft = []\n        #figure(figsize=(10,4))\n        for cc, sample_pick in enumerate(picks):\n            \n            if len(activations.shape)==2: #fc\n                rep_pick = np.zeros((5,5))\n                rep_pick[0,0] = activations[sample_pick,which_filter]+1e-6\n            else:\n                rep_pick = activations[sample_pick,:,:,which_filter]\n                [ii, jj] = [int(x) for x in np.where(rep_pick == np.max(rep_pick))]\n            if plot:\n                figure(0,figsize=(10,4))\n                subplot(1,n,1+cc)\n                imshow(rep_pick)\n                title('Maximum activation loc: ({},{})'.format(ii,jj))\n            \n                figure(cc+2,figsize=(12,4))\n\n            if len(activations.shape)==2: #fc:\n                _patches=observations[picks[cc]]\n                if plot:\n                    figure()\n                    for k in range(4):\n                        subplot(141+k)\n                        matshow(_patches[...,k],fignum=0)\n                _bl = (0,0)\n            else:\n                _patches, _bl = get_obs_patch(observations[picks[cc]], ii, jj, receptive_stride, pad_each_side)\n            patches.append(_patches)\n            bottleft.append(_bl)\n        return np.array(patches), bottleft\n\n    if plot:\n        gray()\n    patches, bottleft = plot_things(picks,plot=plot)\n    \n    return patches, picks, bottleft\n\nif __name__=='__main__':\n    algos = ['a2c','es','ga','apex','rainbow','dqn']\n    game_list_local = ['AmidarNoFrameskip-v4',\n                       'AtlantisNoFrameskip-v4',\n                       'KangarooNoFrameskip-v4',\n                       'ZaxxonNoFrameskip-v4',\n                       'AssaultNoFrameskip-v4',\n                       'EnduroNoFrameskip-v4',\n                       'SeaquestNoFrameskip-v4',\n                       'AsterixNoFrameskip-v4',\n                       'FrostbiteNoFrameskip-v4',\n                       'SkiingNoFrameskip-v4',\n                       'AsteroidsNoFrameskip-v4',\n                       'GravitarNoFrameskip-v4',\n                       'VentureNoFrameskip-v4']\n    \n    algo = algos[-1] \n    env = 'SeaquestNoFrameskip-v4' # sequest\n    \n    observations, activations = build_model_get_act(algo, env, which_layer=2)\n    plot_top3_bot3_patches(activations, observations, which_filter=38, which_layer=2)\n\n"
  },
  {
    "path": "atari_zoo/translate.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport os\nimport glob\nimport sys\nfrom pdb import set_trace as bb\n\n\ndef module_path():\n    encoding = sys.getfilesystemencoding()\n    return os.path.dirname(__file__)\n\npath = module_path()\n\ndopamine_game_list = open(os.path.join(path,\"game_lists/dopamine_game_list\")).read().split(\"\\n\")[:-1]\nes_apex_game_list = open(os.path.join(path,\"game_lists/apex_game_list\")).read().split(\"\\n\")[:-1]\na2c_game_list = open(os.path.join(path,\"game_lists/a2c_game_list\")).read().split(\"\\n\")[:-1]\n\n#align game lists by taking out these games\nblacklist = ['AirRaid','Carnival','ElevatorAction','JourneyEscape','Pooyan']\n\ndopamine_game_list = [k for k in dopamine_game_list if k not in blacklist]\na2c_game_list = [k for k in a2c_game_list if (k[:k.find(\"NoFrameskip-v4\")]) not in blacklist]\n\n\ndef grab_list(mode):\n        if mode=='a2c' or mode=='canonical':\n            return a2c_game_list\n        if mode=='es' or mode=='apex':\n            return es_apex_game_list\n        if mode=='dopamine':\n            return dopamine_game_list\n\ndef translate_game_name(inp_name,inp_mode,out_mode):\n    inp_list = None\n    out_list = None\n\n    inp_list = grab_list(inp_mode)\n    out_list = grab_list(out_mode)\n\n    inp_idx = inp_list.index(inp_name)\n\n    return out_list[inp_idx]\n\n\nif __name__=='__main__':\n\n    for k in range(len(dopamine_game_list)):\n        print(dopamine_game_list[k],es_apex_game_list[k],a2c_game_list[k])\n\n    print(translate_game_name('ice_hockey','apex','canonical'))\n\n    print(a2c_game_list)\n"
  },
  {
    "path": "atari_zoo/utils.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\n\nimport tensorflow as tf\nimport pylab\nimport numpy as np\nimport json\nfrom lucid.misc.io.reading import read_handle\n\ntry:\n    import tf2onnx\nexcept:\n    print('tf2onnx not installed, you will not be able to export to onnx')\n    pass\n\n\"\"\"\nHelper function to load json from a url\n(lucid.misc.io.reading.load chokes on a decoding issue)\n\"\"\"\ndef load_json_from_url(url,cache=None,encoding='utf-8'):\n    with read_handle(url,cache=cache) as handle:\n        res = handle.read().decode(encoding=encoding)\n        return json.loads(res)\n\n\"\"\"\nHelper function to generate a new session\n\"\"\"\ndef get_session():\n    tf.reset_default_graph()\n    tf_config = tf.ConfigProto(\n        inter_op_parallelism_threads=0,\n        intra_op_parallelism_threads=0)\n    tf_config.gpu_options.allow_growth=True\n    session = tf.Session(config=tf_config)\n    return session\n\n\"\"\"\nRender a layer of conv weights to an\nRGB numpy array canvas \n\"\"\"\ndef conv_weights_to_canvas(w):\n    fx = w.shape[0]\n    fy = w.shape[1]\n    in_ch = w.shape[2]\n    out_ch = w.shape[3]\n\n    scale = 1\n    padding = 1\n\n    x_leap = (fx+padding)\n    y_leap = (fy+padding)\n\n    c_sz_x = padding + x_leap * in_ch\n    c_sz_x *= scale\n    c_sz_y = padding + y_leap * out_ch\n    c_sz_y *= scale\n\n    w_max = w.max()\n    w_min = w.min()\n    print(w_min,w_max)\n\n    #first, cheap rescale\n    w_scaled = (w-w_min)/(w_max-w_min)\n\n    canvas = np.zeros((c_sz_x,c_sz_y,3))\n    for i in range(in_ch):\n        for j in range(out_ch):\n            x_idx = padding + i*x_leap\n            y_idx = padding + j*y_leap\n        \n            filt = w_scaled[:,:,i,j]\n        \n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,0] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,1] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,2] = filt\n        \n    canvas = canvas.transpose([1,0,2])\n    return canvas\n\n\"\"\"\nUse Matplotlib\n\"\"\"\ndef visualize_conv_w(w,title=None,subsample=None):\n    if subsample!=None:\n        w=w[:,:,:,:subsample]\n    canvas = conv_weights_to_canvas(w)\n    #pylab.figure(figsize = (10,20))\n    pylab.imshow(canvas)\n    if title:\n        pylab.title(title,fontsize=20)\n    return canvas\n\n#save model out to onnx format\ndef to_onnx(model,fname=\"./frozen_out.onnx\",scope=\"\"):\n    tf.reset_default_graph()\n    model.load_graphdef()\n    model.import_graph(scope=scope)\n\n    tf.import_graph_def(\n            model.graph_def, {}, name=scope)\n\n    graph = tf.get_default_graph()\n    onnx_graph = tf2onnx.tfonnx.process_tf_graph(graph)\n\n    inp_name = model.input_name+\":0\"\n    out_name = model.layers[-1]['name']+\":0\"\n    \n    print(inp_name,out_name)\n    model_proto = onnx_graph.make_model(\"\", [inp_name], [out_name])\n\n    with open(fname, \"wb\") as f:\n        f.write(model_proto.SerializeToString())\n\n    print(\"Done...\")\n\n#convert fc-level activations to a canvas representation\ndef fc_activations_to_canvas(m,act,scale=8,padding=1,width=32,idx=0):\n    \n    if len(act.shape)==2:\n        act=act[idx]\n    \n    channels = act.shape[0]\n\n    fx = fy = scale\n    \n    if width>channels:\n        width=channels\n    in_ch = width\n    out_ch = int(channels / width)\n\n    x_leap = (fx+padding)\n    y_leap = (fy+padding)\n\n    c_sz_x = padding + x_leap * in_ch\n    #c_sz_x *= scale\n    c_sz_y = padding + y_leap * out_ch\n    #c_sz_y *= scale\n\n    #print(c_sz_x,c_sz_y)\n\n    a_max = act.max()\n    a_min = act.min()\n    #print(a_max,a_min)\n\n    #first, cheap rescale\n    a_scaled = (act-a_min)/(a_max-a_min)\n\n    canvas = np.zeros((c_sz_x,c_sz_y,3))\n    canvas[:,:,0]=1.0\n    for i in range(in_ch):\n        for j in range(out_ch):\n            x_idx = padding + i*x_leap\n            y_idx = padding + j*y_leap\n\n            filt = a_scaled[i+j*width]\n\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,0] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,1] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,2] = filt\n\n    canvas = canvas.transpose([1,0,2])\n    return canvas\n\ndef get_activation_scaling(model,act):\n\n        act = model.canonical_activation_representation(act)\n        #print(\"Processed shape\",act.shape)\n\n        act_max_ch = act.max((0,1,2))\n        act_min_ch = act.min((0,1,2))\n        return act_max_ch,act_min_ch\n\n#convert conv-level activations to a canvas representation\ndef conv_activations_to_canvas(model,act,scale=1,padding=1,width=8,idx=0,scaling=None):\n\n    act_max_ch = None\n    act_min_ch = None\n\n    if scaling!=None:\n        act_max_ch,act_min_ch = scaling\n\n    if len(act.shape)==4:\n        #handle NCHW and NHWC\n        act = model.canonical_activation_representation(act)\n        #print(\"Processed shape\",act.shape)\n\n        act = act[idx]\n\n    fx = act.shape[0]\n    fy = act.shape[1]\n    channels = act.shape[2]\n\n    #no blank squares\n    if width>channels:\n        width = channels\n        \n        \n    in_ch = width\n    out_ch = int(channels / width)\n    \n    x_leap = (fx+padding)\n    y_leap = (fy+padding)\n\n    c_sz_x = padding + x_leap * in_ch\n    c_sz_x *= scale\n    c_sz_y = padding + y_leap * out_ch\n    c_sz_y *= scale\n    \n\n    #global max/min\n    a_max = act.max()\n    a_min = act.min()\n\n    #first, cheap rescale\n    a_scaled = (act-a_min)/(a_max-a_min)\n\n    canvas = np.zeros((c_sz_x,c_sz_y,3))\n    canvas[:,:,0]=1.0\n    for i in range(in_ch):\n        for j in range(out_ch):\n            x_idx = padding + i*x_leap\n            y_idx = padding + j*y_leap\n\n            if act_max_ch is None:\n                filt = a_scaled[:,:,i+j*width]\n            else:\n                channel = i+j*width\n                filt = (act[:,:,channel] - act_min_ch[channel])/(act_max_ch[channel]-act_min_ch[channel]+1e-8)\n\n            #flip x & y\n            filt = np.transpose(filt,[1,0])\n\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,0] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,1] = filt\n            canvas[x_idx:x_idx+fx,y_idx:y_idx+fy,2] = filt\n\n\n    canvas = canvas.transpose([1,0,2])\n    return canvas\n\ntry:\n\timport moviepy.editor as mpy\n\tfrom moviepy.video.io.ffmpeg_writer import FFMPEG_VideoWriter\nexcept:\n\tprint(\"Moviepy not installed, movie generation features unavailable.\")\n\nfrom lucid.misc.io.serialize_array import _normalize_array\nimport numpy as np\n\ndef MakeVideo(m,fps=60.0,skip=1,video_fn='./tmp.mp4'):\n    obs = m.get_observations() \n    frames = m.get_frames() \n    size_x,size_y = frames.shape[1:3]   \n\n    writer = FFMPEG_VideoWriter(video_fn, (size_y, size_x), fps)\n    for x in range(0,frames.shape[0],skip):\n        writer.write_frame(frames[x])\n    writer.close()\n\ndef load_clip_from_cache(algo,env,run_id,tag=\"final\",video_cache=\".\"):\n\n    i_video_fn =\"%s/%s-%s-%d-%s.mp4\" % (video_cache,algo,env,run_id,tag)\n\n    return  mpy.VideoFileClip(i_video_fn)\n\n\ndef movie_grid(clip_dict,x_labels,y_labels,grid_sz_x,grid_sz_y,label_padding=50,padding=5,label_fontsize=20):\n    key = list(clip_dict.keys())[0]\n    exemplar = clip_dict[key]\n    size_x,size_y = exemplar.size\n    duration = exemplar.duration\n\n    x_step = (size_x+padding)\n    y_step = (size_y+padding)\n\n    composite_size = (label_padding + x_step * grid_sz_x), (label_padding + y_step * grid_sz_y)\n\n    #load in all the movie clips\n    for _x in range(grid_sz_x):\n        for _y in range(grid_sz_y):\n            pos =(label_padding + _x*x_step,label_padding + _y*y_step)\n            clip_dict[(_x,_y)] = clip_dict[(_x,_y)].set_position(pos)\n            #clip.write_gif(o_video_fn)\n\n    clip_list = []\n    #add background clip\n    clip_list.append(mpy.ColorClip(size=composite_size, color=(255,255,255)))\n\n    #now add x and y labels\n    l_idx = 0\n    if y_labels != None:\n        for label in y_labels:\n            txtClip = mpy.TextClip(label,color='black', fontsize=label_fontsize).set_position((0,label_padding+y_step*l_idx+(y_step/2)))\n            l_idx+=1\n            clip_list.append(txtClip)\n\n    l_idx = 0\n    if x_labels != None:\n        for label in x_labels:\n            txtClip = mpy.TextClip(label,color='black', fontsize=label_fontsize).set_position((label_padding+x_step*l_idx,label_padding/2))\n            l_idx+=1\n            clip_list.append(txtClip)\n    \n    for key in clip_dict:\n        clip_list.append(clip_dict[key])\n    \n    cc = mpy.CompositeVideoClip(clip_list,composite_size)\n    return cc\n\n\n\n\ndef rollout_grid(env,algos,run_ids,tag='final',clip_resize=0.5,label_fontsize=20,out_fn=\"composite.mp4\",video_cache=\".\",length=None):\n\n    clip_dict = {}\n    key = None\n    for algo in algos:\n        for run_id in run_ids:\n            key = (algo,run_id)\n            clip_dict[key] = load_clip_from_cache(algo,env,run_id,tag,video_cache).resize(clip_resize)\n            \n    exemplar = clip_dict[key]\n    size_x,size_y = exemplar.size\n    duration = exemplar.duration\n\n    #labels for grid\n    y_labels = [(\"R%d\"% r) for r in run_ids] \n    x_labels= algos\n\n    label_padding = 50\n    padding = 5\n\n    num_runs = len(run_ids)\n\n    x_step = (size_x+padding)\n    y_step = (size_y+padding)\n\n    composite_size = (label_padding + x_step * len(algos), label_padding + y_step * num_runs)\n\n    algo_idx = 0\n\n    #load in all the movie clips\n    for algo in algos:\n        for run_id in run_ids:\n            pos =(label_padding + algo_idx*x_step,label_padding + (run_id-1)*y_step)\n            clip_dict[(algo,run_id)] = clip_dict[(algo,run_id)].set_position(pos)\n            #clip.write_gif(o_video_fn)\n        \n            print(env,algo,run_id)\n        \n        algo_idx+=1\n    \n\n    clip_list = []\n    #add background clip\n    clip_list.append(mpy.ColorClip(size=composite_size, color=(255,255,255)))\n\n    #now add x and y labels\n    l_idx = 0\n    for label in y_labels:\n        txtClip = mpy.TextClip(label,color='black', fontsize=label_fontsize).set_position((0,label_padding+y_step*l_idx+(y_step/2)))\n        l_idx+=1\n        clip_list.append(txtClip)\n\n    l_idx = 0\n    for label in x_labels:\n        txtClip = mpy.TextClip(label,color='black', fontsize=label_fontsize).set_position((label_padding+x_step*l_idx,label_padding/2))\n        l_idx+=1\n        clip_list.append(txtClip)\n\n    \n    for key in clip_dict:\n        clip_list.append(clip_dict[key])\n    \n    cc = mpy.CompositeVideoClip(clip_list,composite_size)\n\n    if length!=None:\n        duration = length\n\n    cc = cc.resize(1.0).subclip(0,duration)\n\n    if out_fn != None:\n        cc.write_videofile(out_fn)\n\n    return cc,clip_dict\n"
  },
  {
    "path": "colab/AtariZooColabDemo.ipynb",
    "content": "{\n  \"nbformat\": 4,\n  \"nbformat_minor\": 0,\n  \"metadata\": {\n    \"colab\": {\n      \"name\": \"AtariZooColabDemo.ipynb\",\n      \"version\": \"0.3.2\",\n      \"provenance\": [],\n      \"collapsed_sections\": []\n    },\n    \"kernelspec\": {\n      \"name\": \"python3\",\n      \"display_name\": \"Python 3\"\n    },\n    \"accelerator\": \"GPU\"\n  },\n  \"cells\": [\n    {\n      \"metadata\": {\n        \"id\": \"8HWEO12ygohP\",\n        \"colab_type\": \"code\",\n        \"outputId\": \"3d5a3e29-e11b-48e6-f421-1df434f589bd\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 254\n        }\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"!git clone https://github.com/uber-research/atari-model-zoo\\n\",\n        \"import os\\n\",\n        \"os.chdir(\\\"/content/atari-model-zoo\\\")\\n\",\n        \"import atari_zoo\"\n      ],\n      \"execution_count\": 1,\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"text\": [\n            \"Cloning into 'atari-model-zoo'...\\n\",\n            \"remote: Enumerating objects: 126, done.\\u001b[K\\n\",\n            \"remote: Counting objects: 100% (126/126), done.\\u001b[K\\n\",\n            \"remote: Compressing objects: 100% (95/95), done.\\u001b[K\\n\",\n            \"remote: Total 159 (delta 41), reused 104 (delta 30), pack-reused 33\\u001b[K\\n\",\n            \"Receiving objects: 100% (159/159), 20.00 MiB | 27.31 MiB/s, done.\\n\",\n            \"Resolving deltas: 100% (46/46), done.\\n\",\n            \"tf2onnx not installed, you will not be able to export to onnx\\n\",\n            \"Imageio: 'ffmpeg-linux64-v3.3.1' was not found on your computer; downloading it now.\\n\",\n            \"Try 1. Download from https://github.com/imageio/imageio-binaries/raw/master/ffmpeg/ffmpeg-linux64-v3.3.1 (43.8 MB)\\n\",\n            \"Downloading: 8192/45929032 bytes (0.0%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b3047424/45929032 bytes (6.6%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b6823936/45929032 bytes (14.9%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b10690560/45929032 bytes (23.3%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b14573568/45929032 bytes (31.7%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b18399232/45929032 bytes (40.1%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b22315008/45929032 bytes (48.6%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b26206208/45929032 bytes (57.1%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b29335552/45929032 bytes (63.9%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b32645120/45929032 bytes (71.1%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b36446208/45929032 bytes (79.4%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b40312832/45929032 bytes (87.8%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b44179456/45929032 bytes (96.2%)\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b\\b45929032/45929032 bytes (100.0%)\\n\",\n            \"  Done\\n\",\n            \"File saved as /root/.imageio/ffmpeg/ffmpeg-linux64-v3.3.1.\\n\"\n          ],\n          \"name\": \"stdout\"\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"135P9vp2siaA\",\n        \"colab_type\": \"text\"\n      },\n      \"cell_type\": \"markdown\",\n      \"source\": [\n        \"## Download trained model and precomputed rollout data\"\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"KypUsPKqh_br\",\n        \"colab_type\": \"code\",\n        \"outputId\": \"6cb960df-3cf4-4853-a73c-87d6b3cc7a41\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 72\n        }\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"import atari_zoo\\n\",\n        \"from atari_zoo import MakeAtariModel\\n\",\n        \"from pylab import *\\n\",\n        \"\\n\",\n        \"algo = \\\"rainbow\\\" #or try.... es, ga, dqn, a2c, apex\\n\",\n        \"env = \\\"SeaquestNoFrameskip-v4\\\"  #or try... ZaxxonNoFrameSkip-v4\\n\",\n        \"run_id = 2\\n\",\n        \"tag = \\\"final\\\"\\n\",\n        \"m = MakeAtariModel(algo,env,run_id,tag)()\\n\",\n        \"\\n\",\n        \"# get observations, frames, ram state, and neural representations from a representative rollout\\n\",\n        \"obs = m.get_observations()\\n\",\n        \"frames = m.get_frames()\\n\",\n        \"ram = m.get_ram()\\n\",\n        \"rep = m.get_representation()\"\n      ],\n      \"execution_count\": 2,\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"text\": [\n            \"Model path: gs://download-dopamine-rl/lucid/rainbow/Seaquest/2/graph_def.pb\\n\",\n            \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n            \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_2\\n\"\n          ],\n          \"name\": \"stdout\"\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"IH4uNHcGnFda\",\n        \"colab_type\": \"text\"\n      },\n      \"cell_type\": \"markdown\",\n      \"source\": [\n        \"## Display one RGB frame and corresponding pre-processed observation fed into deep NN\\n\"\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"KS9W6tNKggV1\",\n        \"colab_type\": \"code\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 562\n        },\n        \"outputId\": \"b53cec2c-bbbc-41ea-fb5f-afa620de287c\"\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"from IPython.display import Image, display\\n\",\n        \"import numpy as np\\n\",\n        \"import PIL\\n\",\n        \"\\n\",\n        \"idx = 100\\n\",\n        \"frame = frames[idx]\\n\",\n        \"_obs = obs[idx].transpose((2,0,1))\\n\",\n        \"\\n\",\n        \"#display RGB frame \\n\",\n        \"display(PIL.Image.fromarray(frame))\\n\",\n        \"\\n\",\n        \"#display T-3, T-2, T-1, Now frames of observation fed into deep neural network\\n\",\n        \"for i in range(4):\\n\",\n        \"  _obsf = (np.tile(_obs[i,...,np.newaxis],(1,1,3)) * 255).astype(np.uint8)\\n\",\n        \"  display(PIL.Image.fromarray(_obsf))\"\n      ],\n      \"execution_count\": 3,\n      \"outputs\": [\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAKAAAADSCAIAAABCR1ywAAAE/UlEQVR4nO3dP4tUVxjH8Rux18KA\\nhSCCnRMCVkIKhwFhsRUrLUx8B1PpO9jqvoPoQrKlbVgQhi0tFCymtFEsBLENCm5IceRwc+eemXvN\\nec6f334/hGW8mZ095rvPmbt3djdNAwAAAADo+CH0L366fpRyHTByJvcCYOts7gWU6PBg39++9+DR\\nzuMlY4vucxV9v8ODfXe7e7x3n5KxRe9QRcUt2KKH+d249sBM8LB7Dx51d+N6EVgcgcVxFj2AL5NQ\\nDbZocQQWR2BxBBZXd+DQVYipx4VVHJi6Y1QcGGNUFthN4eHBvh9Hf2TS8dOjssANO/NE9QXGJNUH\\nDl0TnnpcVX0v+FN0El5sEFf9Fo3tCCwu+Bx8pTlJuQ4YYYLFBSf4538+p1wHjDDB4oITfK15l3Id\\nMMIEiwtO8Pkzf6RcB4wwweKCE3xy5e+U64ARJlhccII/nfuSch0wEgz8/urXlOuAkeDLhRd/+T3l\\nOmCE52BxBBYXfA7+8PZjynXASDDwxcs/plwHjDDB4ngOFkdgcTwHi2OCgZoFL1U2l071D+XJYIsW\\nR2BxBBZHYHEEFkdgcQQWR2BxBDaxmM1zL+EbrmSJY4JNlDPBBI5vMZuv1sdN09x/ss69FgIbGKyb\\nKzaBo/Hb8v0na5/T3cg4ygQ25+r++dssy0cncDSr9fFiNl/M5rlaDiJwHC6tu90bWXeD5+C6rdbH\\n7h/3Rxe11zgLLnTE50bZx86LCY7PpS3kWgcTbMhf8ciIwOLYosURWByBxRFYHIHFEVgcgcURWByB\\nxRFYHIFNFPJKQ0NgebzYII4JjqyczdkhsDgCR1PUd+p4BBbHSVZMBQ5x8HdVYpLSzq08Jjiy0oaY\\nwPF1pzl7aQKbKOEbZh3Ook24H0TLvYqmIbCdQhqzRYtjgsURWByBxRFYHIHFEVgcgcURWByBxRFY\\nHIHFEVgcgcURWByBxRFYHIHF5Qn8/Omz50+fZfnQp03qb3yna2Js0eIILI7A4lJ82+yY591bv96J\\n9eHQZXWSxclUIXL++Kib2mI/FUILq2uzsd2ix8er679aRfJv0aQ1ZbtFEy87fvhMHF8HiyOwOAKL\\nI7C4aIFL+HUF2MQEi+PLJHGRJ5iNujRs0eIiBy7qf36NhgmWF/nFhtJ+1ypMJngxm7NLFyLmBDO+\\nBYoQuKhfj4yeaBc6yvkNyeiK8xxM3WJFCEzdknEtWhwXOsSFz6IvvEm4DFhhgsWFJ/j8y4TLgBUm\\nWFx4gs++TrcKmGGCxRFYHIHFjXo1qb3dDh5f/rWMsgge3+7xg5cq23b4QUOm/mVCi+bx4z5+tMBj\\nPtjURfP4///xTQKjHJxkiSOwOAKLI7A4Aoub9m2zy+W38++2bZfLZeht9z7dO7tH2Hl+vre3N/nv\\nkcOrhzc3D368+zj9SraYPMHdPL5l73bbtv5u/kb3Dkjm+7doV27zreNzhj4JkMb3B3a1djbbHGWk\\nNDlwbyveeZ8x94cdLlWK48skcQQWR2BxBBZHYHEEFkdgcQQWR2BxBBZHYHEEBgAgj/DvyarWYu/F\\n4PHV0Y3t9+neAcXZbNY90rsd+iTQI3IW7YL5t6G0/o9uWN09N9+3e2TzEeoiErj57wYb2mx9Xd9s\\ndXSjd+edO3lddALvjNGd3e7B7e9Ye2OdwGNOkTaHdft7CZx26QTuGnmSPDi+vSMCjQEAAAAAAAAA\\nMPUv9Fqtl5lgVM4AAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<PIL.Image.Image image mode=RGB size=160x210 at 0x7FA7BEB08278>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\nSUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<PIL.Image.Image image mode=RGB size=84x84 at 0x7FA7BEB083C8>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAIAAACTCYeWAAAFcElEQVR4nO2bP2/aTBzHj/gPd9jG\\njrCDYyBKKVZFIqVS2zVbi1Rl69K8gmTPG+nbyJopS6ssGaoWCXVq1UgJhGBXNaIhQZjWlt3h9CCc\\n5AkNYIOBz2ROvrvv17/z/fMBwJzZJNL7IxaLEQQxLinBQ/b+yOfzHMeNSwoml8sJglCpVAzDUBRF\\nURTDMCqVih91LfhR6MBkMpmtrS1N0wRBIAhid3e3VCptb28LguBHdZNlHsNx3KtXrwKoaLLM//r1\\nq1wuJxKJ79+/O45TLBafPXv27du3drvtR3WeDu/58+djf+eDJIjIx+PxvtdjwXfzGxsbm5ub+FpR\\nlDdv3uBriqJ2d3f9rv1+yP63DEqhUHj06JGiKACAq6urfD6fSqUAAJubm93rly9fvn//3j8N9+Oj\\neQCApmmaptXrddM0Ly8vdV1vt9tnZ2e5XK5YLAIAPn365KuA+5npDs8TeZqmo9HouKQEj8c8x3E+\\nzaUmE495kiRpmh6XlOCZN/v/YBhm7BOPIPH09k+ePInFYuOSEjyeyCOEGIYZl5Tg8Zg3TTMSifzf\\nrdPHZC1pA8YTZ57nSdLfCe9EcbO3n6lxfqab/dx82IAQxmKxp0+fDllO+Lo3giB4ni8UCktLS8lk\\nEgBwdHRkWdYARYXMPISQ47irq6svX77IssyybKvVGrg0z1CnKMqE9/Y8zy8uLrqui7/hzJZ5DM/z\\nkiRpmjbkfn7Imj2m2Wx2Op3hv6mG0jwA4Pfv38MXEsqhblTMzc8qoTTPcRxCaPhyQtbh4f1ly7I6\\nnc7wpYUs8hDCpaWlUW06hMy8bduNRkOWZUmSht9rDVmz73Q6nU6n1WolEonBFjO9hCzyGMdx6vX6\\n8OWE0jwAwHXdGY38qJibn1UGNx+JRNLpNM/zI1QTMAMOdQzD7OzspFKpDx8+HB4ejlZTYDzAPIRQ\\nFMVms8nzPMMw+DhVPB5Pp9PtdrvRaPgm0i8esI21vLz8+vXrVCrV29RrtZosy6VSaX9/n+f5fD5/\\nI5eu6z6dmR6eBzd7y7IuLi56U0ql0ufPnwEAzWbz48ePI5PmPw+IPG729Xp9JCuqSSCUu7ejYj7O\\nzyr9zcdisWk9k9rffLvdtiyLpumFhWlrJv/qJ5FITN+JlT7mKYpiGEZRFNd1R7JhOlH0D6Yoipqm\\nTc3Y3ksf8zRNn5+fu64bjJqA8ZinKOrGJMeyLIqigpUUHB7zBEFMX692Dx6rjuM4jjMuKcHjMS8I\\nAsuymUyGZVmcUq/XDcPAW+V35hdFEQCgqmq3yVxcXFxfX7darTv7SJIkBUEgSVJV1W7iycmJbduX\\nl5e2bd/OAiFkWZbjuHQ6jVNs2z45OcHy7lTFsiyEUJIkLA8A0Gq1qtUqrqV7m2dhs7e3162gF2z+\\n+vq6u5jtqu+WfgNs3jCMrj78WLH5O7Ng89VqtfugRVGUJAmbvzMLLhw/O5ySTqc5jsPmb9/ffcT4\\n2f2T+Wll2masD+Luvr3RaBwcHKysrJTLZVVVy+WyLMs/f/7MZrOnp6fr6+vFYjEej799+7Y3lyiK\\nL1688EPlu3fv8LvKMMzGxsaoiv2nyKuqil1Vq1WcIsvyjx8/RiViXMzf+Vllbn5WmWnzng4vmUxO\\n8RruNsH9iw4h5LquoigIIdM0o9Ho169fIYTZbBavAkzT1HU9MD0gMPOyLD9+/LhWq1EUBSE0TRMh\\nVKvV1tbWKpVKIpHQdZ3juGg0ShDEnz9/DMNgWdbvj3wBvfM0TbuuCyHEB2kQQgRBrK6uHh8fC4Lg\\nOE4mk0EIURRFkiRCSFXVAP7PHVDkuzvf+PwkTjRNEwCAEKJp2rZtx3FIkoxEIviAZTQancqNwzlz\\n5oyNv4eC4dAakGmbAAAAAElFTkSuQmCC\\n\",\n            \"text/plain\": [\n              \"<PIL.Image.Image image mode=RGB size=84x84 at 0x7FA7BE56B278>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAIAAACTCYeWAAAFdUlEQVR4nO2cz0/iTBjHp/Y3baUB\\nZJtqjcvSg5Ig0T148eaabPZg4kUve/buP+HRP8STx032uPGgJHvcjfgDgoCxZEULFoW272HyNnZ1\\nFaEtFPo5lUn7zPOdmT4zfToFgIDRBHn8IxQKoSjaL1e8B3v8Y3Z2luO4frkCSSaTPM8XCgVFUURR\\nFEVRUZRCoeBGXWNuGO0aSZK+fPlSLpd5nkdRdGtr6+fPn5ubmzzPu1HdYImHcBz36dMnDyoaLPHX\\n19f5fD4ajR4fHxuGkc1mFxYWfv/+fXd350Z1toC3uLjY93veS7zo+fHx8VeP+4Lr4tPp9PLyMjwW\\nRXF9fR0e4zi+tbXldu0vg71+Sresrq6+f/9eFEUAwO3t7ezs7OTkJABgeXnZOl5ZWfn+/bt7PryM\\ni+IBAOVyuVwuV6tVTdNqtVqlUrm7uzs/P08mk9lsFgBweHjoqgMvM9IBz9bzBEGQJNkvV7zHJp7j\\nOJfWUoOJTTyGYQRB9MsV7wmG/f8wDNP3hYeX2KJ9JpNhWbZfrniPrec1TUMQ5F+nDh828aqq3t/f\\n98sV77GJj0QioVCoX654j22Qh8NhDHN3wTtQ/B3tR2qeH6xMjscE4v1GPB5HEIRhmB7t+E98PB4n\\nSfLz588rKyvxeHxxcbFrUz6L7YIg3NzciKIoSRLLsoIg7O3tdW3NNtWJojjI0R7H8UgkEolEcBw/\\nPT1NJpMnJyeiKOZyue4M+kk8BEXR6enpZrNZqVR6NOW/e17X9Xw+r2la76b8Jx4AYJpmrVbr3Y4v\\nxTtFIN5v9L68gfhPvIPzkc/EMwzDMEyj0XDEmp/EoygaDocdTLf4STwA4ObmxjRNSZJisVjv1vy0\\nttd1vdFoNBoNjuPGxhzoNj+Jt1BV1ZGw57Nhb/Hw8NC7Eb+Kd4RA/KgSiB9V3jbVra2tLSwsHBwc\\nfPv2zSWHvORtPS9JEsMwmUzGHWe8ptMc3tevX+fn5x+X6Lp+dHSUSqV2dnY6nHXj8bhlv1ar1ev1\\nrnx2jE6HvSRJf5WgKLq0tKSq6lurpCgqk8lY4o+OjnRdf6sRR3hD9jadTj99oiqVSsVi0RXX3Md/\\nqWsH6SjgDWuLdCTeqZzZoNGR+Ovr68eBemjodJ7XdX34tui9Lj4UCkWj0XA4jCAIjuMe+OQZr8/z\\n8EvD8/Nz0zQ9cMhLXhevaZpTqeJBwyYex/GnUa3Vag1fqIPYxKMoOrr78AzDMAyjX654j008z/Ms\\ny8LtLrCkWq0qitJsNv/1BAZfHsiybA2Zi4sLVVXr9Xqz2XymPgzjeR7DMFmWrcJcLtdut2u1Wrvd\\nfnoJRVEsy3IcNzU1BUva7TbcilKtVp/1imVZiqImJiasdxv1er1YLMJarNNsa/vt7W2rgsdA8aqq\\nXlxcWBqg9/96cwLFK4pi+QebFYp/9hIovlgsWg0di8UmJiag+GcvgcZh28GSqakpjuOg+KfnW00M\\n264j8cNKkMN7wp8/f/b396enp/P5vCzL+XxeEISrq6tEInF2dpZKpbLZ7Pj4+MbGxuOrYrHYx48f\\n3fByd3cX3qsMw6TTaafMdtTzsixDVVbeQhCEy8tLp5zoF8E9P6oE4keVkRZvC3jv3r0bsnTFy3j3\\nCSFN06ZpiqJI07SmaSRJ/vr1i6KoRCIBnwI0Tet9I/Wb8Ei8IAgfPnwolUo4jlMUpWkaTdOlUmlu\\nbq5QKESj0UqlwnEcSZIoij48PCiKwrKsS3+MZOHRPU8QhGmaFEW1Wi0AAE3TKIrOzMz8+PGD53nD\\nMCRJomkax3EMw2ialmXZg++5Pep5giDg5jGCIKB+AADcM0/TNEEQ7XbbMAwMwxAEabVazWaTJMln\\nH4oDAgICuuQ/DafRR0dmKlQAAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<PIL.Image.Image image mode=RGB size=84x84 at 0x7FA7BE5D5F60>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\n\",\n            \"text/plain\": [\n              \"<PIL.Image.Image image mode=RGB size=84x84 at 0x7FA7BE56B278>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"AUSGKCZOrYsm\",\n        \"colab_type\": \"text\"\n      },\n      \"cell_type\": \"markdown\",\n      \"source\": [\n        \"## Visualize RAM state across this rollout\\n\"\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"rSZDq6L7rfYb\",\n        \"colab_type\": \"code\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 635\n        },\n        \"outputId\": \"79d8e679-f6d6-4f62-964b-2a77b9cb4f86\"\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"ram = np.array(ram)\\n\",\n        \"#get ram state across all frames of the observation\\n\",\n        \"bin_array = np.zeros((ram.shape[0],128*8),dtype=np.uint8)\\n\",\n        \"\\n\",\n        \"#convert from integer to bits\\n\",\n        \"for idx in range(ram.shape[0]):\\n\",\n        \"    state = ram[idx]\\n\",\n        \"    \\n\",\n        \"    binary = m.ram_state_to_bits(state)\\n\",\n        \"    binary = [int(k) for k in binary]\\n\",\n        \"    \\n\",\n        \"    bin_array[idx]=binary\\n\",\n        \"\\n\",\n        \"gray()\\n\",\n        \"matshow(bin_array)\"\n      ],\n      \"execution_count\": 62,\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/plain\": [\n              \"<matplotlib.image.AxesImage at 0x7f866026ac50>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          },\n          \"execution_count\": 62\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f86603da9b0>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\nqHL3bezSfIcqtFdpbDqi7zKsEzgTe0yuCVE4shjFRADg5Zdfxu7du/Hkk0/itddew7Jly3Duuefi\\nsccew8MPP4zzzz//Y9e37Xj566q+V/S79DOb7xV9p+zfTe1ter+6622eYfN722e7wqTcXNhYd8+2\\n9dyWps+36V91GK3O7Nu3D4888ggef/xxDA0NYe3atTj33HMBAF/96lfx+uuvo9frYXJycv47hw8f\\nRq/XQ6/Xw8TEBABgdnYWSZJgYGCgscGRSISLWhH54IMPsGPHDjz66KPzqzG333473nrrLQDA/v37\\ncfbZZ2PVqlU4ePAgpqamMD09jfHxcaxZswbr16/H6OgoAGDv3r248MILHb5OJBLxTV9S48c899xz\\neOihh/DFL35x/rOrr74azzzzDD71qU9hyZIl2LZtG5YvX47R0VHs2rULfX19GBkZwVVXXYWTJ09i\\n69atePPNNzEwMIDt27fjjDPOcP5ikUjED7UiEolEIlVQZ6xGIhF+oohEIpFWRBGJRCKtiCISiURa\\nEUUkEom0IopIJBJpRRSRSCTSiigikUikFf8fhgHagJ0vCjgAAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f86604ad5c0>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"GGGFATfmtr8l\",\n        \"colab_type\": \"text\"\n      },\n      \"cell_type\": \"markdown\",\n      \"source\": [\n        \"## Visualize neural representation across rollout for this rollout \\n\",\n        \"\\n\",\n        \"Activations of the 512 fully-connected neurons for each observation\"\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"Puo55z-Us0mU\",\n        \"colab_type\": \"code\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 984\n        },\n        \"outputId\": \"0d42e3ba-bfa8-4a28-b1dc-94ad7a044057\"\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"hot()\\n\",\n        \"matshow(rep,vmax=3,vmin=0)\"\n      ],\n      \"execution_count\": 63,\n      \"outputs\": [\n        {\n          \"output_type\": \"execute_result\",\n          \"data\": {\n            \"text/plain\": [\n              \"<matplotlib.image.AxesImage at 0x7f86601c9cc0>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          },\n          \"execution_count\": 63\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f86602d7518>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f86602d7470>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"OucVhqv-qqAB\",\n        \"colab_type\": \"text\"\n      },\n      \"cell_type\": \"markdown\",\n      \"source\": [\n        \"## Visualizing Top Patches for  Sub-detecting Neuron\\n\",\n        \"\\n\",\n        \"Requires GPU runtime to be enabled (Go to \\\"Runtime\\\" menu  -> \\\"Change Runtime Type\\\" option)\"\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"wXjmrtOsiAsc\",\n        \"colab_type\": \"code\",\n        \"outputId\": \"abe7a6dc-f6ff-4ae9-cecc-3bb557b02870\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 90\n        }\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"import atari_zoo.top_patches\\n\",\n        \"algo = 'apex'\\n\",\n        \"env = 'SeaquestNoFrameskip-v4' \\n\",\n        \"run_id = 2\\n\",\n        \"observations, activations,frames = atari_zoo.top_patches.build_model_get_act(algo, env, run_id=run_id,which_layer=2)\"\n      ],\n      \"execution_count\": 52,\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"text\": [\n            \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n            \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n            \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n            \"Layer 2 deepq/q_func/convnet/Conv_2/Relu activations obtained. Shape (2501, 11, 11, 64)\\n\"\n          ],\n          \"name\": \"stdout\"\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"TzN49pBbp3XG\",\n        \"colab_type\": \"code\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 163\n        },\n        \"outputId\": \"7c783b6e-a732-4405-ffc0-e6e604c4eba4\"\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"#sub detector for apex run 2 Seaquest is feature 60\\n\",\n        \"filter_id = 60\\n\",\n        \"\\n\",\n        \"patches, picks, topleft = atari_zoo.top_patches.plot_topN_patches(activations, observations, which_filter=filter_id, which_layer=2,n=8,plot=False)\"\n      ],\n      \"execution_count\": 66,\n      \"outputs\": [\n        {\n          \"output_type\": \"stream\",\n          \"text\": [\n            \"bottom left location in original obs: (66,22)\\n\",\n            \"bottom left location in original obs: (66,30)\\n\",\n            \"bottom left location in original obs: (66,30)\\n\",\n            \"bottom left location in original obs: (50,-2)\\n\",\n            \"bottom left location in original obs: (50,30)\\n\",\n            \"bottom left location in original obs: (66,30)\\n\",\n            \"bottom left location in original obs: (58,22)\\n\",\n            \"bottom left location in original obs: (74,30)\\n\"\n          ],\n          \"name\": \"stdout\"\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"68lppms2uE1U\",\n        \"colab_type\": \"code\",\n        \"colab\": {\n          \"base_uri\": \"https://localhost:8080/\",\n          \"height\": 2675\n        },\n        \"outputId\": \"90a1ab47-1b91-46fd-d35c-8e2a92158ef6\"\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"import matplotlib.patches as patches\\n\",\n        \"from pylab import *\\n\",\n        \"\\n\",\n        \"for pp, tl in zip(picks, topleft):\\n\",\n        \"    #print(tl)\\n\",\n        \"    #print(tuple(reversed(tl)))\\n\",\n        \"    gray()\\n\",\n        \"    fig, ax = subplots(1)\\n\",\n        \"    ax.matshow(observations[pp,:,:,0])\\n\",\n        \"    rect = patches.Rectangle(tuple(reversed(tl)),36,36,linewidth=1,edgecolor='r',facecolor='none')\\n\",\n        \"    ax.add_patch(rect)\"\n      ],\n      \"execution_count\": 67,\n      \"outputs\": [\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a8395f8>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAUsAAAFKCAYAAACU6307AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X9UVHX+P/DnLEjEACtNA0f8geWa\\nGoP9OFaLSUmaHszWH2XRLHq2Tcv8EZ0yQCKT9Wz5g8zU0kpxz7oZJJZSWwvVRmu7SEfrGEO1pW5q\\nCBMS+AMYA7zfP/xyP3NH586bcX68wefjnM55v+c9996nM/nyfe/cHwZFURQQEZGuXwU7ABFRT8Bi\\nSUQkgMWSiEgAiyURkQAWSyIiASyWREQCQgO1oeeeew779++HwWBAbm4uRo4cGahNq7777jvMmzcP\\nf/jDH5CRkYG6ujpkZWWhs7MTZrMZq1atQlhYWECyrFy5Evv27UNHRwceeeQRJCUlBS1LW1sbcnJy\\n0NjYiDNnzmDevHkYPnx40PIAgMPhwOTJkzFv3jwkJycHLUtVVRUyMzMxdOhQAMA111yD2bNnB/Wz\\nKS0txaZNmxAaGorHHnsMw4YNC0qe7du3o7S0VO3bbDa8+eabWLp0KQBg2LBhyM/P93uOLi0tLcjO\\nzsaJEyfQ3t6O+fPnw2w2+y6PEgBVVVXKww8/rCiKohw4cEC57777ArFZjZaWFiUjI0PJy8tTtm7d\\nqiiKouTk5Cjvv/++oiiK8sILLyhvvPFGQLJUVlYqs2fPVhRFUX7++Wfl9ttvD1oWRVGUv//978pr\\nr72mKIqi/Pjjj8qECROCmkdRFGX16tXK9OnTlR07dgQ1y549e5SFCxdqXgtmnp9//lmZMGGCcurU\\nKcVutyt5eXlB/64U5dzf8aVLlyoZGRnK/v37FUVRlCeeeEKpqKgIWIatW7cqBQUFiqIoSn19vTJx\\n4kSf5gnIbnhlZSXGjx8PABgyZAhOnDiB06dPB2LTqrCwMLz++uuIjY1VX6uqqsK4ceMAAKmpqais\\nrAxIlptuugkvvfQSACA6OhptbW1BywIAkyZNwpw5cwAAdXV1iIuLC2qegwcP4sCBAxg7diyA4H1P\\n7gQzT2VlJZKTkxEZGYnY2FgsW7ZMis/n5Zdfxpw5c1BbW6vuNQY6S0xMDJqbmwEAJ0+eRN++fX2a\\nJyDF8vjx44iJiVH7V1xxBRoaGgKxaVVoaCjCw8M1r7W1tam7KyaTKWCZQkJCEBERAQAoKSnBbbfd\\nFrQsztLT07Fo0SLk5uYGNc+KFSuQk5Oj9oP92Rw4cABz587FAw88gH//+99BzfPjjz/C4XBg7ty5\\nsFqtqKysDPrn89VXX6Ffv34ICQlBdHS0+nqgs9x11104duwY7rzzTmRkZCArK8uneQJ2zNKZIuEV\\nlsHI9NFHH6GkpASFhYWYMGFCULMAQFFREb755hs89dRTmgyBzLNz505cf/31GDhw4AXHA/3ZDB48\\nGAsWLEBaWhqOHj2KWbNmobOzM2h5AKC5uRnr16/HsWPHMGvWrKB9V11KSkowbdq0814PdJZdu3Yh\\nPj4emzdvxrfffov58+cjKirKZ3kCUixjY2Nx/Phxtf/TTz/BbDYHYtO6IiIi4HA4EB4eDrvdrtlF\\n97fdu3dj48aN2LRpE6KiooKaxWazwWQyoV+/fhgxYgQ6OzthNBqDkqeiogJHjx5FRUUF6uvrERYW\\nFtTPJi4uDpMmTQIADBo0CFdeeSWqq6uDlsdkMuGGG25AaGgoBg0aBKPRiJCQkKDlAc4dlsjLy4PB\\nYFB3gwEEPMsXX3yBMWPGAACGDx+OM2fOoKOjw2d5ArIbfuutt6KsrAwAUFNTg9jYWERGRgZi07pG\\njx6t5iovL0dKSkpAtnvq1CmsXLkSr776Kvr27RvULACwd+9eFBYWAjh3yKS1tTVoedasWYMdO3bg\\nrbfewowZMzBv3rygfjalpaXYvHkzAKChoQGNjY2YPn160PKMGTMGe/bswdmzZ9HU1BTU7wo4V4CM\\nRiPCwsLQp08fXH311di7d29QsiQkJGD//v0AgNraWhiNRgwZMsRneQxKgObKBQUF2Lt3LwwGA559\\n9lkMHz48EJtV2Ww2rFixArW1tQgNDUVcXBwKCgqQk5ODM2fOID4+Hs8//zz69Onj9yzFxcVYt24d\\nrrrqKvW15cuXIy8vL+BZgHOn6Tz99NOoq6uDw+HAggULYLFYkJ2dHZQ8XdatW4f+/ftjzJgxQcty\\n+vRpLFq0CCdPnkR7ezsWLFiAESNGBPWzKSoqQklJCQDg0UcfRVJSUtDy2Gw2rFmzBps2bQJw7vju\\nkiVLcPbsWVx33XVYvHhxQHIA504dys3NRWNjIzo6OpCZmQmz2eyzPAErlkREPRmv4CEiEsBiSUQk\\ngMWSiEgAiyURkQAWSyIiASyWREQCvL6CR4ZbrhERBYpXxfLzzz/H4cOHUVxcjIMHDyI3NxfFxcW+\\nzkZEJA9v7uu2Zs0a5a233lL7EydOVE6dOuX2/QAUAEp1dbXaluE/mfLIlIV5ek4W2fLIlMWbPHq8\\nKpZ5eXnKhx9+qPYfeOAB5dChQx6LpXNbhv9kyiNTFubpOVlkyyNTFm/y6PHJXYcUD1dMVldXw2Kx\\nCL030GTKI1MWgHn0yJQFkCuPTFkA3+Xxqlh295ZrSUlJAM6FNhgM3mzSL2TKI1MWgHn0yJQFkCuP\\nTFmA7ufRK6xenTok6y3XiIj8xauZ5Y033ojExESkp6ert1wjIurNAnKLtq5pcE+fovuTTFkA5tEj\\nUxZArjwyZQEk2A0nIrrUsFgSEQlgsSQiEsBiSUQkICjPDRd1yy23aPruniV9Me69916fr9NbMmUB\\nmEePTFkAufLIlAXwXR7OLImIBLBYEhEJkHo3nHqu8PBwtb1161bN2Lx589R2Q0OD23W8+eabmv7v\\nfvc7tV1aWqoZu/322zX9W2+9VW0/99xzmrGCggK17foc6ZCQELXtcDg0Y9u3b9e0Z8yYccExAMJj\\n1HNwZklEJIDFkohIAIslEZEAHrMkv3A+3vfLL794tY7PPvtMbY8dO7Zby1555ZVq+/e//71mbN++\\nfWq7vb1dM2a1WtV2WFiYZmzXrl0AgClTpqhtunRwZklEJIDFkohIAHfDyS+cb4vleousvn37qm29\\nU4cuu+wyTd9oNLp9r+uu/okTJ9T2N998oxlzvqKjpKREMzZ58mS1PXfu3Atua8qUKfjggw80r505\\nc0bTN5lMatv1FCTqmTizJCISwGJJRCSAxZKISACPWZJfON+e3/l0nO5YvXq12t6+fft5lz86q6ys\\n1O07++KLL9yOiV6K2NjYqOlnZGS4fe/MmTOF1kly48ySiEgAiyURkQAWSyIiASyWREQCWCyJiASw\\nWBIRCeCpQyTs6quvVtuzZ8/WjOXm5gqv54033lDbrncE0vPSSy+p7czMTOHlnnnmGU1/2bJlwssS\\ndeHMkohIgFCx/O677zB+/Hj87W9/AwDU1dVh5syZsFqtyMzM9Pp+hUREPYXHYtna2oply5YhOTlZ\\nfW3t2rWwWq3Ytm0bEhISzrtzCxFRb+PxmGVYWBhef/11vP766+prVVVVyM/PBwCkpqaisLDQ60va\\nSC7Tpk1T266X/t13331ul4uLi9P0o6Oj1bbr0xWdDRkyRNMfOnSo2n7ooYc0Y/Hx8Wrb9RJC5zEA\\nGDVqlNttbtiwQW0/+uijbt9H5MygOF/Eq2PdunWIiYlBRkYGkpOT1Wtvjxw5gqysLBQVFbld1maz\\nwWKx+CYxEVEQXPSv4SK1NikpSX2v641g9dxyyy2a/sCBA7sXzgPXZz8HkyxZumaWVqsVb731lmZM\\nb2a5YMECTV90ZpmTk6Pp680snbk+N7w7M8vjx4+rbW9mlrJ8V11kyiNTFqD7eVyf8e7Mq2IZEREB\\nh8OB8PBw2O12xMbGerMakpxecayrq9NdVq9AOquvr9f0ly9fLrTcJ598oum/+OKLQssBwCuvvCL8\\nXqIuXp06NHr0aJSVlQEAysvLkZKS4tNQRESy8TiztNlsWLFiBWpraxEaGoqysjIUFBQgJycHxcXF\\niI+Px9SpUwORlYgoaDwWS4vFgq1bt573+pYtW/wSiIhIRrzckTTeeecdAOd+4LmYA/XeLutuOU8H\\n6mX6UYF6J17uSEQkgMWSiEiA1Lvhl112maZ/+eWX+3wb/lint2TKAjCPHpmyAHLlkSkL4Ls8nFkS\\nEQlgsSQiEsBiSUQkQOpjlkajUdM3mUw+34Y/1uktmbIAzKNHpiyAXHlkygL4Lg9nlkREAlgsiYgE\\nSL0bHhERoelHRUX5fBv+WKe3ZMoCMI8embIAcuWRKQvguzycWRIRCWCxJCISwGJJRCSAxZKISACL\\nJRGRABZLIiIBLJZERAKkPs8yMjJS0+fljoHFPO7JlAWQK49MWQBe7khEFFAslkREAgyKoih+34jB\\nAABQFEVtixg1apSm379/f5/m2rlzpzSP8ZUpC8A8emTKAsiVp7tZXC9pbm1tDWqenTt3uh3jzJKI\\nSACLJRGRABZLIiIBUp861NDQoOl3dHT4fBuHDx/2+Tq9JVMWgHn0yJQFkCtPd7Ls2rVL058yZYqv\\n4/jssxEqlitXrsS+ffvQ0dGBRx55BElJScjKykJnZyfMZjNWrVqFsLAwnwQiIpKRx2K5Z88efP/9\\n9yguLkZTUxOmTZuG5ORkWK1WpKWlYfXq1SgpKYHVag1EXiKioPBYLG+66SaMHDkSABAdHY22tjZU\\nVVUhPz8fAJCamorCwkK/FEuz2azp+/rUIQBISEjw+Tq9JVMWgHn0yJQFkCuPpyyupwQ6u+eeezR9\\n50Nx3u5O++qz8fgDT0hIiHouVElJCW677Ta0tbWpu90mk+m8Y4tERL2N8EnpH330EV599VUUFhZi\\nwoQJqKysBHCu2mdnZ6OoqMjtsjabDRaLxTeJiYiCQOgHnt27d2Pjxo3YtGkToqKiEBERAYfDgfDw\\ncNjtdsTGxuoun5SUBIBX8OiRKQvAPHpkygLIlUcki/Pf61mzZmnG/vrXv2r6F7sb7ssreDwWy1On\\nTmHlypX4y1/+gr59+wIARo8ejbKyMkyZMgXl5eVISUkRDkNEl7aDBw+q7WeffTaISbrHY7F8//33\\n0dTUhMcff1x9bfny5cjLy0NxcTHi4+Ol+VeNiMhfPBbL+++/H/fff/95r2/ZssUvgYiIZCT1XYeM\\nRqOm36dPH5/mampqQkxMjE/X6S2ZsgDMo0emLIBceWTKAnQ/T1NTk9sxXhtORCSAxZKISACLJRGR\\nAKnvOuR6rCE6Otrn24iPj/f5Or0lUxaAefTIlAWQK49MWQDf5eHMkohIAIslEZEAFksiIgEslkRE\\nAlgsiYgEsFgSEQlgsSQiEsBiSUQkgMWSiEgAiyURkQAWSyIiASyWREQCWCyJiASwWBIRCWCxJCIS\\nwGJJRCSAxZKISIDUd0onop7J+Smu+fn5mrH169er7cGDB2vGDh8+rOnb7Xavtu/8+O6nnnpKM/bS\\nSy+p7dTUVOF1cmZJRCSAxZKISAB3w4nookVFRWnaixYtUvuKomjeO3/+fLUdHh6uGcvOzvZq+889\\n95ym397errYjIyM1Y3l5eWp7yZIlwtvgzJKISIDHmWVbWxtycnLQ2NiIM2fOYN68eRg+fDiysrLQ\\n2dkJs9mMVatWISwsLBB5iYiCwmOx/OSTT2CxWDBnzhzU1tbij3/8I2688UZYrVakpaVh9erVKCkp\\ngdVqDUReIqKg8FgsJ02apLbr6uoQFxeHqqoq9XSA1NRUFBYWslgSkapPnz5qu6ysTDN29913q+2f\\nfvpJMzZy5EhN/6uvvur29py3ee+99+Kyyy7TjP3zn/9U2wUFBULrBwCD4nr01Y309HTU19dj48aN\\nePDBB1FZWQkAOHLkCLKyslBUVOR2WZvNBovFIhyKLmDwYMDlHDS6hCQkAD/8EOwUlzThX8OLiorw\\nzTff4KmnntL8uiVSa5OSktT3Op+s6smAAQM0/ejoaOFlRdTU1CAxMdGn6/SWpyw1hw8j8dprpckT\\naDLlCUaWmq+/drtNGT6brl/D9+zZg9/+9rdYvHixOtadmeU//vEPTV90Zrlq1SpN/7333gMAvPLK\\nK3j33Xc1Y84zywkTJmjG0tLS3G7DY7G02WwwmUzo168fRowYgc7OThiNRjgcDoSHh8NutyM2Ntbz\\nn4aIeq1Tp05p2rm5uW7f++mnn/p8+65X6TjLyclxO1ZeXq7p6xVLj6cO7d27F4WFhQCA48ePo7W1\\nFaNHj1b/tSgvL0dKSoqn1RAR9WgeZ5bp6el4+umnYbVa4XA4sGTJElgsFmRnZ6O4uBjx8fGYOnVq\\nILISEQWNx2IZHh6OF1544bzXt2zZ4pdAREQy4hU8REQCWCyJiASwWBIRCWCxJCISwGJJRCSAxZKI\\nSACLJRGRABZLIiIBLJZERAJYLImIBLBYEhEJYLEkIhLAYklEJIDFkohIAIslEZEAFksiIgEslkRE\\nAlgsiYgECD8Kl4iot4mLixN+L2eWREQCWCyJiARwN5yIerW+fftq+pMnT1bbQ4cOFV4PZ5ZERAJY\\nLImIBLBYEhEJ4DFLIurVWlpaNP2kpCS1/csvvwivR2hm6XA4MH78eLz99tuoq6vDzJkzYbVakZmZ\\n2a2NERH1VELFcsOGDfj1r38NAFi7di2sViu2bduGhIQElJSU+DUgEZEMPO6GHzx4EAcOHMDYsWMB\\nAFVVVcjPzwcApKamorCwEFar1a8hiYi8ZTAYNP3XXntNbR88eFAzNn36dLfr8TizXLFiBXJyctR+\\nW1sbwsLCAAAmkwkNDQ1iiYmIejDdmeXOnTtx/fXXY+DAgRccVxRFaCPV1dWwWCzdWiZQampqgh1B\\npZvFYAh4Vpk+G0CuPAHP4uH7v6Q/Gw++/PJLn6xHt1hWVFTg6NGjqKioQH19PcLCwhAREQGHw4Hw\\n8HDY7XbExsZ63EjXr0+Kopw3JdYzYMAATT86Olp4WRE1NTVITEz06Tq95SlLDRDQrDJ9NoBceYKR\\nRe/7v9Q/Gz01NTW44YYbNK85T/5cd8P1Cr1usVyzZo3aXrduHfr3748vv/wSZWVlmDJlCsrLy5GS\\nktKt8EREgeR6xo5rgRTV7ZPSFy5ciJ07d8JqtaK5uRlTp071asNERD2J8EnpCxcuVNtbtmzxSxgi\\nIlnxckciIgEslkREAlgsiYgEsFgSEQlgsSQiEsBiSUQkgMWSiEgAiyURkQAWSyIiASyWREQCWCyJ\\niASwWBIRCWCxJCISwGJJRCSAxZKISACLJRGRABZLIiIBLJZERAJYLImIBLBYEhEJYLEkIhLAYklE\\nJIDFkohIAIslEZEAFksiIgEslkREAlgsiYgEhHp6Q1VVFTIzMzF06FAAwDXXXIPZs2cjKysLnZ2d\\nMJvNWLVqFcLCwvwelogoWDwWSwC4+eabsXbtWrW/ePFiWK1WpKWlYfXq1SgpKYHVavVbSCKiYPNq\\nN7yqqgrjxo0DAKSmpqKystKnoYiIZCM0szxw4ADmzp2LEydOYMGCBWhra1N3u00mExoaGvwakogo\\n2AyKoih6b7Db7di3bx/S0tJw9OhRzJo1C62trfj8888BAIcPH0Z2djaKiorcrsNms8Fisfg2+aXG\\nYAD0vyrqzfj9B53HmWVcXBwmTZoEABg0aBCuvPJKVFdXw+FwIDw8HHa7HbGxsbrrSEpKAgAoigKD\\nwSAcbsCAAZp+dHS08LIiampqkJiY6NN1estTlhogoFll+mwAufIEI4ve93+pfzZ6upunpqbG7ZjH\\nY5alpaXYvHkzAKChoQGNjY2YPn06ysrKAADl5eVISUkRDkNE1BN5nFnecccdWLRoET7++GO0t7dj\\n6dKlGDFiBLKzs1FcXIz4+HhMnTo1EFmJiILGY7GMjIzExo0bz3t9y5YtfglERCQjXsFDRCSAxZKI\\nSACLJRGRABZLIiIBLJZERAJYLImIBLBYEhEJYLEkIhLAYklEJIDFkohIAIslEZEAFksiIgEslkRE\\nAlgsiYgECD2Dh6g3+dWv/m+OsHv3brfvu/XWWwMRh3oIziyJiASwWBIRCWCxJCISwGOWdMn517/+\\npbZPnz6tGYuMjAx0HOohOLMkIhLAYklEJIC74dQjVVRUaPqffPKJpn/HHXeobYfDoRlraWlxu17n\\n3fKysjLNWEREhNrevXs3UlJShPNSz8eZJRGRABZLIiIBLJZERAJ4zJJ6pJKSEk1/6tSpmr7rcUpR\\nffr0Uduuxzadj1l6MmPGDLdjiqKo7fb2ds1YWFjYhRfKz8c999yjeWnHjh3CeejicWZJRCRAaGZZ\\nWlqKTZs2ITQ0FI899hiGDRuGrKwsdHZ2wmw2Y9WqVe7/RSQi6gU8ziybmprw8ssvY9u2bdi4cSM+\\n/vhjrF27FlarFdu2bUNCQsJ5u0RERL2Nx5llZWUlkpOTERkZicjISCxbtgx33HEH8vPzAQCpqako\\nLCyE1Wr1e1iiLuvXr9ft+1NNTY3Hcyy3b9/u020uBY9RBptBcT7afAGvvfYaDh06hObmZpw8eRIL\\nFy7EE088gcrKSgDAkSNHkJWVhaKiIrfrsNlssFgsvk1+qTEYAP2vinozfv9BJ3TMsrm5GevXr8ex\\nY8cwa9Ysza95HmotACApKUl9r8FgEA43YMAATT86Olp4WRE1NTVITEz06Tq95SlLDRDQrDJ9NoBc\\neYKRRe/7v9Q/Gz3dzVNTU+N2zGOxNJlMuOGGGxAaGopBgwbBaDQiJCQEDocD4eHhsNvtiI2NFQ7T\\nHa4/GnXn1A1R/lintzxlCXRWmT4bQK48wciit81L/bPR46s8Hn/gGTNmDPbs2YOzZ8+iqakJra2t\\nGD16tHrdbHl5Oa+RJaJez+PMMi4uDhMnTsR9990HAMjLy0NSUhKys7NRXFyM+Pj4804IJiLqbYSO\\nWaanpyM9PV3z2pYtW/wSiIhIRlJf7uj8FD4ACA31fVx/rNNbnrIEOqtMnw0gV55gZNHb5qX+2ejx\\nVR5e7khEJIDFkohIgFzzZReu53B2dHT4fBv+WKe3PGUJdFaZPhtArjzByKK3zUv9s9HjqzycWRIR\\nCWCxJCISwGJJRCRA6mOWUVFRmr7ZbFbbycnJmrHRo0cLr/fnn3++4DpdNTQ0CK/TV/TyLF++3Kt1\\nut6t5ocfflDbrncDb21t9Wob3tL78z755JOafnf+/C+88ILbsUB/r66X2xmNRrU9ePBgzZjr3dBV\\n48fr/vl70v/HDz74oNq+4oorhNf5n//8R9PvupkPcP6d8U+dOiW8XlGcWRIRCWCxJCISIPVu+OTJ\\nkzX9sWPH+mS9zlN/1109UTabzevtu7u3p+5u5gcfeL09t7t2HmRnZ2v6tbW1wss6X3117bXXerX9\\ni+Ht9/r111+r7bNnz7p9X0ZGhqbfv39/TT8mJsar7Xurx/x/fBFcD7WJHnp79tlnNf2DBw96tX3O\\nLImIBLBYEhEJYLEkIhIg9TFLmV0KzxRyPe4W6ONwwSB6fLW3fP+95c+h5/LLL9f0vf0zc2ZJRCSA\\nM8seoi0uDuPGjw/oNscFdGueyZQn0Fna4uICvEVyxWLZQ/znjTcCur1x48bh448/Dug29ciUR6Ys\\nFDjcDSciEsBiSUQkgMWSiEhArzxmuXTpUk2/ublZ0++6Q8n333+PnJycC44BwC+//KIZc+7n5eVp\\nxt5wOqY4d+5czdj999/vtj9nzpwL/hkuVk1Njdo+dOhQt5cfN24c3n33XV9Guigy5QlUFtdTXsYH\\n+Ac+0uLMkohIAIslEZEAFksiIgG98phldXW1pj9w4EBN/8SJE2r7v//9r2bsnXfeUduNjY2aMedb\\nlj3++OOasZtuukltO9/mCwAeeOABTb+9vd1tdiKSk8diuX37dpSWlqp9m82GN998U/0RZdiwYcjP\\nz/dbQCIiGXgsljNmzMCMGTMAAJ9//jk++OAD/PnPf0Zubi5GjhyJJ598Ep9++iluv/12v4clIgqW\\nbu2Gv/zyy3j++eeRkZGBkSNHAgBSU1NRWVkpVbF0fUCXHufdblcmk0nT37Rpk1d5UlJSvFruYiQm\\nJl6w3R133323r+L4hEx5ZMpCgSH8A89XX32Ffv36ISQkBNHR0errJpMpKE+PIyIKJIOiKIrIG5cs\\nWYK77roLgwcPxiOPPIKdO3cCOPd4yh07dug+etRms10S980jot5LeDe8qqoKeXl5MBgMmiti7HY7\\nYmNjdZdNSkoCACiKAoPBIBzO9SoZXz2wrItMd4+RKQvAPHpkygLIlUemLED384wb5/7me0LF0m63\\nw2g0IiwsDABw9dVXY+/evRg1ahTKy8sxc+ZM4TDUOxw9elTTdz09S9SPP/6o6Q8YMEBouQ9cnnaZ\\nlpYmvM2VK1eq7aysLOHlNmzYAODcX6gNGzbg0UcfFV6Wej6hYtnQ0KB5fGxubi6WLFmCs2fP4rrr\\nrhN+JCURUU8lVCwtFovml+Df/OY32LZtm99CERHJpldewUP+8eGHH6rt+vp6zVhkZKSmP23aNLXt\\nepXUZ599pra7Du10cT6kc+zYMc3YmjVr1LbraV2uTp8+rbZffPFFzdjgwYN1l+3y/PPPa/rOhwgi\\nIyM1hyK8PQxBPQevDSciEsBiSUQkgMWSiEgAj1mShvOxPtfz00aNGqW2Y2JiNGMdHR2a/pEjR9S2\\n0WjUjD300ENut19XV6e2XY91ut7pyd1yADR3Mn/mmWeEl3v11VfVtut5vqGh//fXhafLXXo4syQi\\nEsBiSUQkgLvhpOG8+6x36Zcr5we9AcCgQYO82r7zrQpSU1OFl/vhhx80/YcfflhoOefTmIDzH3ZH\\n1IUzSyIiASyWREQCWCyJiAQI38/yojby/2/L1t1btPmbTHlkygIwjx6ZsgBy5ZEpC9D9PHrlkDNL\\nIiIBLJZERAJYLImIBPA8S/KLYcOGqW3XyxYnTJigtq+66irN2P/+9z+1HR8f73b9rrdoc33aouvt\\n3Zy1traqbdfzLInc4cySiEgAiyURkQDuhpNPOD9LHjj3kLsuznfrAc49g76L6+705ZdfrrZdd6Vv\\nvvlmte16J6NDhw5p+mazWW1TSeptAAACk0lEQVS///77mrH09HS1ff3112vGnE8dcd5dB4D33ntP\\ns37nDK6XW1Lvw5klEZEAFksiIgEslkREAnjMkvyipaXF7ZjzUxK7w/mJks63kgO0pyMB2tOVpk6d\\n6nadrpfC6V0a53zbuUGDBqGxsVE/MPUqnFkSEQlgsSQiEsC7DkmSR6YsAPPokSkLIFcembIAvOsQ\\nEVHAefyBp6WlBdnZ2Thx4gTa29sxf/58mM1m9Vklw4YNQ35+vr9zEhEFl+LB1q1blYKCAkVRFKW+\\nvl6ZOHGikpGRoezfv19RFEV54oknlIqKCt11AFC6NtXVluE/mfLIlIV5ek4W2fLIlMWbPHo87obH\\nxMSgubkZAHDy5En07dsXtbW1GDlyJIBzT+CrrKz0tBoioh7N4274XXfdhbfffht33nknTp48iQ0b\\nNuBPf/qTOm4ymdDQ0KC7jurqalgsFgDQPYAaDDLlkSkLwDx6ZMoCyJVHpiyA7/J4LJa7du1CfHw8\\nNm/ejG+//Rbz589HVFRUt4IkJSWp7+3Jv5T5k0xZAObRI1MWQK48MmUBup9Hr555LJZffPEFxowZ\\nAwAYPnw4zpw5g46ODnXcbrcjNjZWOAwRUU/k8ZhlQkIC9u/fDwCora2F0WjEkCFDsHfvXgBAeXk5\\nUlJS/JuSiCjIPJ6U3tLSgtzcXDQ2NqKjowOZmZkwm81YsmQJzp49i+uuuw6LFy/W3whPSvdIpiwA\\n8+iRKQsgVx6ZsgC+3Q3nFTyS5JEpC8A8emTKAsiVR6YsgG+LJa/gISISwGJJRCSAxZKISACLJRGR\\nABZLIiIBLJZERAJYLImIBATkPEsiop6OM0siIgEslkREAlgsiYgEsFgSEQlgsSQiEsBiSUQk4P8B\\neTO5ur6EAiIAAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864af1ad30>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\nsSQiEvB/TT5/a9OQkD0AAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a7f8e80>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAUsAAAFKCAYAAACU6307AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X9UVGX+B/D3BLIEouAICG6i/RCt\\nwcytPYtKRRku1pa2m9pEnt0200WNtjVAYlnJU6aY62quVop71jIw6pietQNbu5bHRTzYroHlGNai\\nooyIqAiM8eN+//DL3bkjM/Mwzsx9oPfrnM55nnlm7n17Rz899879YVAURQEREbl0nd4BiIj6AhZL\\nIiIBLJZERAJYLImIBLBYEhEJYLEkIhIQ6K8VvfLKKzh06BAMBgNycnIwbtw4f61adfToUaSnp+OX\\nv/wl0tLScPr0aWRmZqKzsxORkZEoKChAUFCQX7KsXLkSBw8eREdHB+bNm4eEhATdsrS1tSE7OxuN\\njY24fPky0tPTMWbMGN3yAIDNZsNDDz2E9PR0JCYm6paloqICGRkZuOWWWwAAo0ePxtNPP63rttm5\\ncyc2bdqEwMBAPPvss4iPj9clz3vvvYedO3eq/erqarz77rtYunQpACA+Ph75+fk+z9GtpaUFWVlZ\\nuHDhAtrb27FgwQJERkZ6L4/iBxUVFcozzzyjKIqi1NTUKDNnzvTHajVaWlqUtLQ0JTc3V9m6daui\\nKIqSnZ2t7N69W1EURXnttdeUd955xy9ZysvLlaefflpRFEU5d+6ccs899+iWRVEU5W9/+5vy5ptv\\nKoqiKCdPnlRSUlJ0zaMoirJ69Wrl0UcfVd5//31ds+zfv19ZtGiR5jU985w7d05JSUlRmpubFavV\\nquTm5ur+XSnKlX/jS5cuVdLS0pRDhw4piqIozz//vLJnzx6/Zdi6dauyatUqRVEUpb6+Xpk6dapX\\n8/hlN7y8vBxTpkwBANx00024cOECLl265I9Vq4KCgvDWW28hKipKfa2iogL3338/ACA5ORnl5eV+\\nyXLXXXfhT3/6EwBg0KBBaGtr0y0LAEybNg1z584FAJw+fRrR0dG65jl27Bhqampw7733AtDve3JG\\nzzzl5eVITEzEwIEDERUVhWXLlkmxfdavX4+5c+eirq5O3Wv0d5aIiAicP38eAHDx4kWEh4d7NY9f\\niuXZs2cRERGh9ocMGYKGhgZ/rFoVGBiI4OBgzWttbW3q7orRaPRbpoCAAISEhAAASkpKcPfdd+uW\\nxd7s2bOxePFi5OTk6JpnxYoVyM7OVvt6b5uamhrMnz8fjz/+OPbt26drnpMnT8Jms2H+/Pkwm80o\\nLy/Xfft88cUXiImJQUBAAAYNGqS+7u8sDz74IE6dOoUHHngAaWlpyMzM9Goevx2ztKdIeIWlHpk+\\n/vhjlJSUoLCwECkpKbpmAYCioiJ89dVXeOGFFzQZ/Jlnx44dGD9+PG644YYex/29bUaOHImFCxci\\nNTUVJ06cwJw5c9DZ2albHgA4f/48Xn/9dZw6dQpz5szR7bvqVlJSghkzZlz1ur+zfPjhh4iNjcXm\\nzZtx5MgRLFiwAGFhYV7L45diGRUVhbNnz6r9M2fOIDIy0h+rdikkJAQ2mw3BwcGwWq2aXXRf27t3\\nLzZu3IhNmzYhLCxM1yzV1dUwGo2IiYnB2LFj0dnZidDQUF3y7NmzBydOnMCePXtQX1+PoKAgXbdN\\ndHQ0pk2bBgAYMWIEhg4diqqqKt3yGI1G3HHHHQgMDMSIESMQGhqKgIAA3fIAVw5L5ObmwmAwqLvB\\nAPye5fPPP8fkyZMBAGPGjMHly5fR0dHhtTx+2Q2fNGkSSktLAQCHDx9GVFQUBg4c6I9VuzRx4kQ1\\nV1lZGZKSkvyy3ubmZqxcuRJvvPEGwsPDdc0CAJWVlSgsLARw5ZBJa2urbnnWrFmD999/H9u3b8dj\\njz2G9PR0XbfNzp07sXnzZgBAQ0MDGhsb8eijj+qWZ/Lkydi/fz+6urrQ1NSk63cFXClAoaGhCAoK\\nwoABA3DjjTeisrJSlyxxcXE4dOgQAKCurg6hoaG46aabvJbHoPhprrxq1SpUVlbCYDDgD3/4A8aM\\nGeOP1aqqq6uxYsUK1NXVITAwENHR0Vi1ahWys7Nx+fJlxMbGYvny5RgwYIDPsxQXF2PdunUYNWqU\\n+tqrr76K3Nxcv2cBrpym8+KLL+L06dOw2WxYuHAhTCYTsrKydMnTbd26dRg+fDgmT56sW5ZLly5h\\n8eLFuHjxItrb27Fw4UKMHTtW121TVFSEkpISAMBvfvMbJCQk6Januroaa9aswaZNmwBcOb6bl5eH\\nrq4u3H777ViyZIlfcgBXTh3KyclBY2MjOjo6kJGRgcjISK/l8VuxJCLqy3gFDxGRABZLIiIBLJZE\\nRAJYLImIBLBYEhEJYLEkIhLg8RU8MtxyjYjIXzwqlgcOHEBtbS2Ki4tx7Ngx5OTkoLi42NvZiIjk\\n4cl93dasWaNs375d7U+dOlVpbm52+n4ACgClqqpKbcvwn0x5ZMrCPH0ni2x5ZMriSR5XPCqWubm5\\nyt///ne1//jjjyvffPON22Jp35bhP5nyyJSFefpOFtnyyJTFkzyueOWuQ4qbKyarqqpgMpmE3utv\\nMuWRKQvAPK7IlAWQK49MWQDv5fGoWPb2lmsJCQkAroQ2GAyerNInZMojUxaAeVyRKQsgVx6ZsgC9\\nz+OqsHp06pCst1wjIvIVj2aWEyZMwG233YbZs2ert1wjIurP/HKLtu5pcF+fovuSTFkA5nFFpiyA\\nXHlkygJIsBtORPR9w2JJRCSAxZKISACLJRGRAF2eGy5qwoQJmn5sbKzX1/HQQw95fZmekikLwDyu\\nyJQFkCuPTFkA7+XhzJKISACLJRGRAKl3w6nvWrFihdrOysrSjC1fvlxtv/HGG5qxlJQUtf3mm29q\\nxn7xi184Xd/x48c1/QMHDqjt667TzglefvlltZ2Xl6cZs3/v5cuXNWNvvfWWpj137twexwAIj1Hf\\nwZklEZEAFksiIgEslkREAnjMknzixRdfVNtPPPGEZsz+DlWNjY2aMfvjlI6fu/XWW9X222+/rRn7\\n5ptvNH3708wWLVqkGVuyZInL7N1eeeWVHvtr1669aoz6P84siYgEsFgSEQngbjj5xIYNG9R2Tk6O\\nZmz37t1qu7W1VTP27LPPqu0vv/xSM7Zu3Tq1bbPZXK7faDSq7UuXLjl934ABAzT98PBwtV1QUKAZ\\n+/3vf6+2Fy1ahOeff17tO55mFBERIZyV+gbOLImIBLBYEhEJYLEkIhLAY5bkE55e0rd27doeX8/I\\nyEBTU5PwcqqqqnpsO2pvb9f0GxoanL63+xjlrl27NMcrAWDhwoVOP+d46hL1TZxZEhEJYLEkIhLA\\nYklEJIDFkohIAIslEZEAFksiIgE8dYiExcXFqW2z2awZs7/7uTvr169X2wsWLBD+3LJly9S2/aWH\\n7vz2t7/V9P/4xz8Kf5aoG2eWREQChIrl0aNHMWXKFPUegqdPn8aTTz4Js9mMjIwMfPfddz4NSUSk\\nN7fFsrW1FcuWLUNiYqL62tq1a2E2m7Ft2zbExcWhpKTEpyGJiPTm9phlUFAQ3nrrLc0T6ioqKpCf\\nnw8ASE5ORmFh4VXHsKhvSk1NVds/+9nPNGMPP/yw088NHTpU0x80aJDadnVn8pEjR2r6o0aNUtuO\\nf6eGDRumth2f9BgdHa3pjx8/3uk67Y+vit41ncigKIoi8sZ169YhIiICaWlpSExMRHl5OYArjyDN\\nzMxEUVGR089WV1fDZDJ5JzERkQ6u+ddwkVqbkJCgvtdgMAgve8KECZq+/XNVvGHXrl1XzZ70IkuW\\n7pllenr6Vc/tdjWzdJyhic4s7Z/hDTifWQ4bNgz19fVqv7S0VPO53swsz549K5TNGVm+q24y5ZEp\\nC9D7PLt27XI65lGxDAkJgc1mQ3BwMKxWK6KiojxZDEnOVXG0L1w9ES1CVqtV07d/0Jkr+/bt0/Rf\\neukloc8BwF//+lfh9xJ18+jUoYkTJ6r/Zy8rK0NSUpJXQxERycbtzLK6uhorVqxAXV0dAgMDUVpa\\nilWrViE7OxvFxcWIjY3F9OnT/ZGViEg3boulyWTC1q1br3p9y5YtPglERCQjXu5IGh999BGAKz/w\\neHq3c8DzO6U7+9yuXbtcLvNashKJ4OWOREQCWCyJiARIvRseFBSk6QcHB3t9Hb5YpqdkygIwjysy\\nZQHkyiNTFsB7eTizJCISwGJJRCSAxZKISIDUxyxDQ0M1/SFDhnh9Hb5YpqdkygIwjysyZQHkyiNT\\nFsB7eTizJCISwGJJRCRA6t1wx5/8HXfLvcEXy/SUTFkA5nFFpiyAXHlkygJ4Lw9nlkREAlgsiYgE\\nsFgSEQlgsSQiEsBiSUQkgMWSiEgAiyURkQCpz7N0PD8qIiLC6+vwxTI9JVMWgHlckSkLIFcembIA\\n3svDmSURkQAWSyIiAQZFURSfr8RgAAAoiqK2RcTExGj6YWFhXs1lsVgQHx/v1WV6qjvL2LFj1de+\\n+uor3fPIQqY8MmUB5MojUxag93ksFovTMc4siYgEsFgSEQlgsSQiEiD1qUNRUVGa/rBhw7y+jlGj\\nRnl9mZ4aNWoUcnNz1b59Ww8ybRtArjwyZQHkyiNTFsB7eYSK5cqVK3Hw4EF0dHRg3rx5SEhIQGZm\\nJjo7OxEZGYmCgoKrHltLRNSfuC2W+/fvx9dff43i4mI0NTVhxowZSExMhNlsRmpqKlavXo2SkhKY\\nzWZ/5CUi0oXbYnnXXXdh3LhxAIBBgwahra0NFRUVyM/PBwAkJyejsLDQJ8XyzJkzmn5bW5vX1/Ht\\nt996fZm9MWnSJLUdGxurGXPsl5eXq23HM758cQaY3tvGkUx5ZMoCyJVHpiyA9/K4/YEnICAAISEh\\nAICSkhLcfffdaGtrU3e7jUYjGhoavBKGiEhWwielf/zxx3jjjTdQWFiIlJQUdZZTW1uLrKwsFBUV\\nOf1sdXU1TCaTdxITEelA6AeevXv3YuPGjdi0aRPCwsIQEhICm82G4OBgWK3Wq361dpSQkACAV/D0\\npHs3vLCwEE899RTS09PVsT//+c+a9/pzN1yGbWNPpjwyZQHkyiNTFsC7V/C4LZbNzc1YuXIl/vKX\\nvyA8PBwAMHHiRJSWluKRRx5BWVkZkpKShMP0xnXXaY8SBAZ6/0wnXyyzN+y/HIvFgoyMDKfv7d7+\\nAHDx4kWf5gL03zaOZMojUxZArjwyZQG8l8ftUnbv3o2mpiY899xz6muvvvoqcnNzUVxcjNjYWEyf\\nPt0rYYiIZOW2WM6aNQuzZs266vUtW7b4JBARkYzkmi87aGpq0vQvXbrk9XXU1dV5fZmerv/w4cM6\\nJrma3tvGkUx5ZMoCyJVHpiyA9/Lw2nAiIgEslkREAlgsiYgESH3McvDgwZq+t8+zBIDo6GivL9NT\\nMmUBmMcVmbIAcuWRKQvgvTycWRIRCWCxJCISwGJJRCSAxZKISACLJRGRABZLIiIBLJZERAJYLImI\\nBLBYEhEJYLEkIhLAYklEJIDFkohIAIslEZEAqe86RETkiZycHK8vkzNLIiIBLJZERAJYLImIBPCY\\nJRH1O7fddpvXl8mZJRGRABZLIiIB3A0noj7vnXfeER5buHCh2m5qahJeB2eWREQC3M4s29rakJ2d\\njcbGRly+fBnp6ekYM2YMMjMz0dnZicjISBQUFCAoKMgfeYmIdOG2WP7zn/+EyWTC3LlzUVdXh6ee\\negoTJkyA2WxGamoqVq9ejZKSEpjNZn/kJSLShdtiOW3aNLV9+vRpREdHo6KiAvn5+QCA5ORkFBYW\\nslgSkW5OnTql6cfGxjp97+uvv662n3jiCeF1GBRFUUTeOHv2bNTX12Pjxo341a9+hfLycgDA8ePH\\nkZmZiaKiIqefra6uhslkEg5FEhg5Eqit1TsF6SUuDvjvf/VOIRXhX8OLiorw1Vdf4YUXXoB9fRWp\\ntQkJCep7DQaDcLiYmBhNPywsTPizIiwWC+Lj4726TE/JlAUALLW1iB89Wu8YKpm2j0xZAN/ksRw9\\n6tEy9do2BQUFmn73zPLOO+9EZWWl0885ziwtFovT97otltXV1TAajYiJicHYsWPR2dmJ0NBQ2Gw2\\nBAcHw2q1Iioqyt1iiIh85oUXXujxdYvFclVB9HTS5fbUocrKShQWFgIAzp49i9bWVkycOBGlpaUA\\ngLKyMiQlJXm0ciKivsLtzHL27Nl48cUXYTabYbPZkJeXB5PJhKysLBQXFyM2NhbTp0/3R1YiIt24\\nLZbBwcF47bXXrnp9y5YtPglERCQjXu5IRN8rzc3NHn2OlzsSEQlgsSQiEsBiSUQkgMWSiEgAiyUR\\nkQAWSyIiASyWREQCWCyJiASwWBIRCWCxJCISwGJJRCSAxZKISACLJRGRgH5z1yH7W9lfunRJM1ZX\\nV+fvOETUz3BmSUQkgMWSiEgAiyURkYB+c8zS/hGWP/rRjzRjTU1Nmn5ra6tfMhFR/8GZJRGRABZL\\nIiIB/WY33J7NZtP0x44dq+kfPHjQn3GIqB/gzJKISACLJRGRABZLIiIBffaYZVhYmKY/dOhQtR0e\\nHq4Z27dvn18yEVH/JTSztNlsmDJlCj744AOcPn0aTz75JMxmMzIyMvDdd9/5OiMRke6EiuWGDRsw\\nePBgAMDatWthNpuxbds2xMXFoaSkxKcBiYhk4HY3/NixY6ipqcG9994LAKioqEB+fj4AIDk5GYWF\\nhTCbzT4N2ZPrr79e0w8JCVHb3O0mIm9zO7NcsWIFsrOz1X5bWxuCgoIAAEajEQ0NDb5LR0QkCZcz\\nyx07dmD8+PG44YYbehxXFEVoJVVVVTCZTL36jL/YX1OuN5mywGCQKw/k2j4yZQF8kOcavv/+um1c\\nFss9e/bgxIkT2LNnD+rr6xEUFISQkBDYbDYEBwfDarUiKirK7UoSEhIAXCmUBoNBOFxMTIymb/8L\\nuON6IyMj1fbhw4eFlm+xWDQ3DdaTTFkAwALIlUei7SNTFsA3eTz9/vv6tnFVWF0WyzVr1qjtdevW\\nYfjw4fj3v/+N0tJSPPLIIygrK0NSUpJwEG86c+aMyz4RkTf1+qT0RYsWYceOHTCbzTh//jymT5/u\\ni1xERFIRPil90aJFanvLli0+CUNEJCte7khEJIDFkohIAIslEZEAFksiIgEslkREAlgsiYgEsFgS\\nEQlgsSQiEsBiSUQkgMWSiEgAiyURkYA++8Ayf7B/CBoAnD17Vqck3087duzQ9Ldv3662P/roI80Y\\n71dAvsaZJRGRABZLIiIBLJZERAJ4zNKFlpYWTf+66/73/5auri5/x/neaW9v1/Q7Ozt1SkLEmSUR\\nkRAWSyIiAdwNd6Gtrc3p2D333KPpf/rpp76O06fYH7J47733nL7PcVfb/lHJHR0dTj83bdo0TT8l\\nJUXTP3LkiNrOz893HdbP7r77bo8+99lnn3k5CfUGZ5ZERAJYLImIBLBYEhEJ4DHLXrA/Tvndd99p\\nxoYMGaK2z50757dMsrI/9uh4mpWrY5GiHE8jCg0NveZl+ourY4+Bgf/7J2n/dwoAoqKinH7OcezM\\nmTMepiNnOLMkIhLAYklEJOB7vxtuf4oLANxyyy1qe9iwYZqx8vJyte24G05a9rvh//jHPzRjb7/9\\nttpubm4WWp7FYsHjjz/unXASsz9E0Ztdae52+x5nlkREAtzOLCsqKpCRkaHOuEaPHo2nn34amZmZ\\n6OzsRGRkJAoKChAUFOTzsEREehHaDf/xj3+MtWvXqv0lS5bAbDYjNTUVq1evRklJCcxms89CEhHp\\nzaNjlhUVFeolZMnJySgsLOyzxdLxmKX9cUpewugdGzZs0DsC0TUTKpY1NTWYP38+Lly4gIULF6Kt\\nrU3d7TYajWhoaPBpSCIivRkU+58te2C1WnHw4EGkpqbixIkTmDNnDlpbW3HgwAEAQG1tLbKyslBU\\nVOR0GdXV1TCZTN5NTr5lMACu/2pQf8bv/ypuZ5bR0dHqHV5GjBiBoUOHoqqqCjabDcHBwbBarS6v\\nLACAhIQEAFdOJzEYDMLhYmJiNP2wsDDhz4qwWCy47bbbNK9NmjRJbftzN9xisSA+Pt5v63PHAsiV\\nR6LtI1MWwDd5PP3++/q2sVgsTsfcFsudO3eioaEBv/71r9HQ0IDGxkY8+uijKC0txSOPPIKysjIk\\nJSUJh5GN46V3PE5JRD1xWyzvu+8+LF68GJ988gna29uxdOlSjB07FllZWSguLkZsbCymT5/uj6xE\\nRLpxWywHDhyIjRs3XvU6n9NMRN8nvIKHiEgAiyURkQAWSyIiASyWREQCWCyJiASwWBIRCWCxJCIS\\nwGJJRCSAxZKISACLJRGRABZLIiIB3/unOxJRz0JCQjT97lstdquoqPBnHN1xZklEJIDFkohIAHfD\\niahHd955p6b/2Wef6ZREDpxZEhEJYLEkIhLAYklEJIDHLIlIpT7t9OhRnDhxwifruP/++9X2fffd\\npxmrra3V9O1PT7LZbJoxV09i9AXOLImIBLBYEhEJ4G44EakOHz6stn/4wx9qxgYNGqTpV1VVqe2u\\nri7hddx1111qOzg4WDM2fvx4Td/+qqGMjAzhdfgCZ5ZERAJYLImIBLBYEhEJ4DFLIurR3r17Nf1b\\nbrlF0x8+fLja7s1pRq+++qrTMfXUpf9nfwxVb5xZEhEJEJpZ7ty5E5s2bUJgYCCeffZZxMfHIzMz\\nE52dnYiMjERBQQGCgoJ8nZWISDduZ5ZNTU1Yv349tm3bho0bN+KTTz7B2rVrYTabsW3bNsTFxaGk\\npMQfWYmIdON2ZlleXo7ExEQMHDgQAwcOxLJly3DfffchPz8fAJCcnIzCwkKYzWafhyUi/Xz99dc+\\nX4dMxygduS2WJ0+ehM1mw/z583Hx4kUsWrQIbW1t6m630WhEQ0ODy2VUVVXBZDIBABRF8UJs7/H3\\n9aWuyJQFBoNceSDX9pEpC+CDPNfw/ffXbSN0zPL8+fN4/fXXcerUKcyZM0dT8ESKX/dZ+IqiwGAw\\nCIeLiYnR9MPCwoQ/K8JisSA+Pt6ry/SUTFkAwALIlUei7SNTFsA3eTz9/vv6tnFVWN0WS6PRiDvu\\nuAOBgYEYMWIEQkNDERAQAJvNhuDgYFitVkRFRQmH6Q3HH42uv/56r6/DF8v0lExZAOZxRaYsgFz/\\nNvrrtnH7A8/kyZOxf/9+dHV1oampCa2trZg4cSJKS0sBAGVlZUhKSvJKGCIiWbmdWUZHR2Pq1KmY\\nOXMmACA3NxcJCQnIyspCcXExYmNjMX36dJ8HJSLSk9Axy9mzZ2P27Nma17Zs2eKTQEREMpL6ckfH\\nH4MCA70f1xfL9JRMWQDmcUWmLIBc/zb667bh5Y5ERAJYLImIBMg1X3bgeA5nR0eH19fhi2V6SqYs\\nAPO4IlMWQK5/G/1123BmSUQkgMWSiEgAiyURkQCpj1k6Xgs+ZMgQtX3nnXdqxhz7rpw/f77HZTo6\\nd+6c8DK9xVWe+fPne7TM3bt3a/rHjx9X221tbZoxx76v9ebPm5OTI7zcjRs3Oh3z9/fqeLmdfX/E\\niBGasWnTpnm0jr7099j+nO3w8HDhZVZWVjrtt7e3a8aam5uFlyuKM0siIgEslkREAqTeDZ8yZYqm\\nn5iY6JXl2k/9Pd21vZZ75Dm7ZVRvdjN7w6Ndu1mzsGDBAs1L9fX1wh+3v/pq9OjRvV//NfL0ez16\\n9KjadnX7wZ///Oea/rBhwzT9wYMHe7R+T3n97/GhQ1f9GR35+++xp4feFi9erOl/++23Hq2fM0si\\nIgEslkREAlgsiYgESH3MUmYy3TrfVxyPu/n7OJweRI+v9pfv39Wfo7/8GR2fuODpn4szSyIiAZxZ\\nUs/i4jBz1iy9U/zPrFmYqXeGbjJlAXySpyUy0stL7PtYLKln//0vtm/frncK1cyZM6XJI1MWQL48\\n/RV3w4mIBLBYEhEJYLEkIhLQL49Zrl69WtO/cOGCpm+z2QBcOdazfPnyHseAq+9kYt/PyMjQjH3w\\nwQdqe86cOZqxefPmafoPP/yw2n7iiSd6/kNco+5HF+u9DG+SKY9jlmeeecbr6/jBD36g6SclJXl9\\nHSSOM0siIgEslkREAlgsiYgE9Mtjll9++aWmP3z4cE3f/i7KNTU1mrHNmzerbfs7qgPAyy+/rLbz\\n8vI0Y+PHj1fbR44c0YzNmDFD03c8FkpE8nNbLN977z3s3LlT7VdXV+Pdd9/F0qVLAVy5zjI/P99n\\nAYmIZOC2WD722GN47LHHAAAHDhzARx99hJdffhk5OTkYN24cfve73+HTTz/FPffc4/OwRER66dVu\\n+Pr167F8+XKkpaVh3LhxAIDk5GSUl5dLVSw3bdok/F773W5Hjg9TKigo8CjPT37yE48+dy2u9fI3\\n2S6hkylPT1kc7+pP/Y/wDzxffPEFYmJiEBAQgEGDBqmvG41GNDQ0+CQcEZEsDIqrB43YycvLw4MP\\nPoiRI0di3rx52LFjBwDgX//6F95//3289tprTj9bXV0Nk8nkncRERDoQ3g2vqKhAbm4uDAaD5ldi\\nq9WKqKgol59NSEgAcOUBUPYPsnLnueee0/S99cCybrLv2umJeZyTKQsgVx6ZsgC9z+PqKjGh3XCr\\n1YrQ0FAEBQVhwIABuPHGG9UHnJeVlfEyrO+hU6dOaf4j6u+EZpYNDQ0YMmSI2s/JyUFeXh66urpw\\n++23Y+LEiT4LSEQkA6FiaTKZNL8w33zzzdi2bZvPQhERyaZfXsFDvrF37161bbVaNWOhoaGafmpq\\nql8yEfkLrw0nIhLAYklEJIDFkohIAI9ZkkZra6va3rdvn2as+xJXABg8eLDfMhHJgDNLIiIBLJZE\\nRAK4G04aJ0+eVNuTJk3SMQmRXDizJCISwGJJRCSAxZKISIDw/SyvaSX/f1u23t6izddkyiNTFoB5\\nXJEpCyBXHpmyAL3P46occmZJRCSAxZKISACLJRGRAJ5nST5x8803q+2amhrNmP2TQEeMGKEZO378\\nuNoeNmyY0+VHRERo+ikpKZp+fX2908/abDa1XVFR4fR9RPY4syQiEsBiSUQkgLvh5BVhYWGavv2z\\n5AMCAjRjX375pdp23J2+/vqBq5IuAAACs0lEQVTr1bbjrvT48ePV9sCBAzVjtbW1mr7RaFTbn3zy\\niWZsxowZavvWW2+FM/Z3YAKAjz/+WLN8+7vD2x8+oP6JM0siIgEslkREAlgsiYgE8Jgl+URLS4vT\\nseHDh3u0TPvjoP/5z380Y/anIwHAsWPH1PZPf/pTp8u87jrtfKGrq8vpe+1zDx8+HOfPn3cdmPoV\\nziyJiASwWBIRCeBdhyTJI1MWgHlckSkLIFcembIAvOsQEZHfuf2Bp6WlBVlZWbhw4QLa29uxYMEC\\nREZGYunSpQCA+Ph45Ofn+zonEZG+FDe2bt2qrFq1SlEURamvr1emTp2qpKWlKYcOHVIURVGef/55\\nZc+ePS6XAUDpXlV3W4b/ZMojUxbm6TtZZMsjUxZP8rjidjc8IiJCPUXi4sWLCA8PR11dHcaNGwcA\\nSE5ORnl5ubvFEBH1aW53wx988EF88MEHeOCBB3Dx4kVs2LABL730kjpuNBo157/1pKqqCiaTCQBc\\nHkDVg0x5ZMoCMI8rMmUB5MojUxbAe3ncFssPP/wQsbGx2Lx5M44cOYIFCxZobpogEiQhIUF9b1/+\\npcyXZMoCMI8rMmUB5MojUxag93lc1TO3xfLzzz/H5MmTAQBjxozB5cuX0dHRoY5brVZERUUJhyEi\\n6ovcHrOMi4vDoUOHAAB1dXUIDQ3FTTfdhMrKSgBAWVkZkpKSfJuSiEhnbk9Kb2lpQU5ODhobG9HR\\n0YGMjAxERkYiLy8PXV1duP3227FkyRLXK+FJ6W7JlAVgHldkygLIlUemLIB3d8N5BY8keWTKAjCP\\nKzJlAeTKI1MWwLvFklfwEBEJYLEkIhLAYklEJIDFkohIAIslEZEAFksiIgEslkREAvxyniURUV/H\\nmSURkQAWSyIiASyWREQCWCyJiASwWBIRCWCxJCIS8H/bOsOznQBw9wAAAABJRU5ErkJggg==\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a742160>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a7017b8>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAUsAAAFKCAYAAACU6307AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X1QVNf9BvBnA1IioCJhEZiIeRNN\\nd43apFOMJKEaLSRNNK0v2RCnbTRa30hTA4jUaqw1irFGY8QENVNbAwk6RqemUJ3YcZIVR5MaqIrF\\ntr4gbBARX2CJwP394Y/bvau7e1h29x7I85lx5pw9u/c+3o3fnHv3vhgURVFARERu3aF3ACKi7oDF\\nkohIAIslEZEAFksiIgEslkREAlgsiYgEBAdqRb///e9x7NgxGAwG5OTkYNiwYYFaterUqVOYPXs2\\nfvaznyE9PR01NTXIzMxEW1sboqOjkZeXh5CQkIBkWbVqFY4ePYrW1lbMnDkTZrNZtyzNzc3Izs5G\\nfX09WlpaMHv2bAwZMkS3PABgt9vx9NNPY/bs2UhKStItS1lZGTIyMvDAAw8AAAYPHozp06frum12\\n796NgoICBAcHY/78+UhMTNQlz0cffYTdu3er/YqKCnzwwQdYsmQJACAxMRFLly71e44O169fR1ZW\\nFhobG3Hjxg3MmTMH0dHRvsujBEBZWZny8ssvK4qiKFVVVcrkyZMDsVqN69evK+np6Upubq6ybds2\\nRVEUJTs7W9m7d6+iKIry5ptvKn/+858DksVqtSrTp09XFEVRLl26pDz++OO6ZVEURfnLX/6ivPvu\\nu4qiKMr58+eVcePG6ZpHURRlzZo1ynPPPafs2LFD1yyHDh1S5s2bp3lNzzyXLl1Sxo0bp1y9elWx\\n2WxKbm6u7t+Votz8N75kyRIlPT1dOXbsmKIoivLqq68qBw4cCFiGbdu2KatXr1YURVFqa2uV8ePH\\n+zRPQHbDrVYrxo4dCwC477770NjYiGvXrgVi1aqQkBC89957MBqN6mtlZWUYM2YMACAlJQVWqzUg\\nWR555BG89dZbAIA+ffqgublZtywAkJaWhhkzZgAAampqEBMTo2ue06dPo6qqCk888QQA/b4nV/TM\\nY7VakZSUhPDwcBiNRixbtkyK7bNhwwbMmDED1dXV6l5joLNERkbi8uXLAIArV66gX79+Ps0TkGJ5\\n8eJFREZGqv3+/fujrq4uEKtWBQcHIzQ0VPNac3OzursSFRUVsExBQUHo3bs3AKC4uBiPPfaYblkc\\nTZ06FQsWLEBOTo6ueVauXIns7Gy1r/e2qaqqwqxZs/D888/js88+0zXP+fPnYbfbMWvWLFgsFlit\\nVt23z1dffYXY2FgEBQWhT58+6uuBzvLUU0/hwoULePLJJ5Geno7MzEyf5gnYMUtHioRXWOqRad++\\nfSguLsaWLVswbtw4XbMAQGFhIU6cOIHXXntNkyGQeXbt2oXhw4fj7rvvvu14oLfNoEGDMHfuXKSm\\npuLcuXOYNm0a2tradMsDAJcvX8bbb7+NCxcuYNq0abp9Vx2Ki4sxceLEW14PdJaPP/4YcXFx2Lx5\\nM06ePIk5c+YgIiLCZ3kCUiyNRiMuXryo9r/++mtER0cHYtVu9e7dG3a7HaGhobDZbJpddH87ePAg\\n8vPzUVBQgIiICF2zVFRUICoqCrGxsRg6dCja2toQFhamS54DBw7g3LlzOHDgAGpraxESEqLrtomJ\\niUFaWhoAYODAgbjrrrtQXl6uW56oqCiMGDECwcHBGDhwIMLCwhAUFKRbHuDmYYnc3FwYDAZ1NxhA\\nwLN88cUXGD16NABgyJAhaGlpQWtrq8/yBGQ3/NFHH0VJSQkA4J///CeMRiPCw8MDsWq3Ro0apeYq\\nLS1FcnJyQNZ79epVrFq1Cps2bUK/fv10zQIAR44cwZYtWwDcPGTS1NSkW561a9dix44d+PDDDzFp\\n0iTMnj1b122ze/dubN68GQBQV1eH+vp6PPfcc7rlGT16NA4dOoT29nY0NDTo+l0BNwtQWFgYQkJC\\n0KtXL9x77704cuSILlkSEhJw7NgxAEB1dTXCwsJw3333+SyPQQnQXHn16tU4cuQIDAYDfvvb32LI\\nkCGBWK2qoqICK1euRHV1NYKDgxETE4PVq1cjOzsbLS0tiIuLw4oVK9CrVy+/ZykqKsL69etxzz33\\nqK+98cYbyM3NDXgW4OZpOosWLUJNTQ3sdjvmzp0Lk8mErKwsXfJ0WL9+PeLj4zF69Gjdsly7dg0L\\nFizAlStXcOPGDcydOxdDhw7VddsUFhaiuLgYAPDLX/4SZrNZtzwVFRVYu3YtCgoKANw8vrt48WK0\\nt7fjoYcewsKFCwOSA7h56lBOTg7q6+vR2tqKjIwMREdH+yxPwIolEVF3xit4iIgEsFgSEQlgsSQi\\nEsBiSUQkgMWSiEgAiyURkQCvr+CR4ZZrRESB4lWxPHz4MM6cOYOioiKcPn0aOTk5KCoq8nU2IiJ5\\neHNft7Vr1yoffvih2h8/frxy9epVl+8HoABQysvL1bYMf2TKI1MW5uk+WWTLI1MWb/K441WxzM3N\\nVf72t7+p/eeff17597//7bFYOrZl+CNTHpmyME/3ySJbHpmyeJPHHZ/cdUjxcMVkeXk5TCaT0HsD\\nTaY8MmUBmMcdmbIAcuWRKQvguzxeFcvO3nLNbDYDuBnaYDB4s0q/kCmPTFkA5nFHpiyAXHlkygJ0\\nPo+7wurVqUOy3nKNiMhfvJpZjhw5Et/97ncxdepU9ZZrREQ9WUBu0dYxDe7uU3R/kikLwDzuyJQF\\nkCuPTFkACXbDiYi+bVgsiYgEsFgSEQlgsSQiEqDLc8NFjRw5UtOPi4vz+Tqefvppny/TWzJlAZjH\\nHZmyAHLlkSkL4Ls8nFkSEQlgsSQiEiD1bjh1XytXrlTbWVlZmrEVK1ao7U2bNmnGxo0bp7bfffdd\\nzdhPf/pTl+vreI52h/Xr16vt2tpazdjy5cvVtvPzte+443/zh5aWFs1Ybm6upv273/1O7b/33nua\\n986YMUNojLoPziyJiASwWBIRCWCxJCISwGOW5BeLFi1S2y+88IJmzPEOVfX19Zoxx+OUzp978MEH\\n1faf/vQnt+t3XM4zzzzj8n03btxwObZu3TpNv+PvtH37drz11ltu1089D2eWREQCWCyJiARwN5z8\\nYuPGjWo7JydHM7Z371613dTUpBmbP3++2j5+/LhmzPF0ILvd7nb9jrv6QUFBAolvdeedd2r6V69e\\nvW0buPU0o8jISLXtKSt1D5xZEhEJYLEkIhLAYklEJIDHLMkvvL2kz/l0nQ4ZGRloaGgQXo7Var1t\\nuzM683eYO3euy7F58+Z5tX6SC2eWREQCWCyJiASwWBIRCWCxJCISwGJJRCSAxZKISABPHSJhCQkJ\\nattisWjGHO9+7smGDRvU9pw5c4Q/t2zZMrX9m9/8Rvhzv/rVrzT9P/zhD8KfJerAmSURkQChYnnq\\n1CmMHTtWvYdgTU0NXnzxRVgsFmRkZOCbb77xa0giIr15LJZNTU1YtmwZkpKS1NfWrVsHi8WC7du3\\nIyEh4ZaHRRER9TQej1mGhITgvffe0zyhrqysDEuXLgUApKSkYMuWLbccw6LuKTU1VW3/+Mc/1oy5\\nu+P4XXfdpen36dNHbS9cuNDl5wYNGqTp33PPPWrb+b+pAQMGqG3nJz3GxMRo+sOHD3e5Tsfjq+6y\\nETkyKIqiiLxx/fr1iIyMRHp6OpKSktTrbc+ePYvMzEwUFha6/GxFRQVMJpNvEhMR6aDLv4aL1Fqz\\n2ay+12AwCC975MiRmn5cXFznwnmwZ8+eW2ZPepElS8fMcvbs2bc8t9vdzNJ5hiY6s3R8hjfgemY5\\nYMAAzfO/S0pKNJ/rzMzy4sWLQtlckeW76iBTHpmyAJ3Ps2fPHpdjXhXL3r17w263IzQ0FDabDUaj\\n0ZvFkOTcFUfHwnU7okXIZrNp+o4POnPns88+0/Rff/11oc8BwB//+Efh9xJ18OrUoVGjRqn/Zy8t\\nLUVycrJPQxERycbjzLKiogIrV65EdXU1goODUVJSgtWrVyM7OxtFRUWIi4vDhAkTApGViEg3Houl\\nyWTCtm3bbnl969atfglERCQjXu5IGp988gmAmz/weHu3c8D7O6W7+tyePXvcLrMrWYlE8HJHIiIB\\nLJZERAKk3g0PCQnR9ENDQ32+Dn8s01syZQGYxx2ZsgBy5ZEpC+C7PJxZEhEJYLEkIhLAYklEJEDq\\nY5ZhYWGafv/+/X2+Dn8s01syZQGYxx2ZsgBy5ZEpC+C7PFIXS9LRoEHYdOaM3in+5913sUnvDB1k\\nygL4Jc/F8HAs4m0XNVgs6fbOnMHMl1/WO4Vq06ZNmDlzpt4xAMiVBfBPnk1Od5wiyYul80/+zrvl\\nvuCPZXpLpiwA87gjUxZArn8bPXXb8AceIiIBLJZERAJYLImIBLBYEhEJYLEkIhLAYklEJIDFkohI\\ngNTnWTqfHxUZGenzdfhjmd6SKQvAPO7IlAWQ699GT902nFkSEQlgsSQiEmBQFEXx+0oMBgCAoihq\\nW0RsbKymHxER4dNclZWVSExM9OkyvSVTFgCoPHUKiYMH6x1DJdP2kSkL4J883n7/vs6SkJCgts94\\ncWOXzuaprKx0OcaZJRGRABZLIiIBLJZERAKkPnXI+Q7HRqPR5+uIj4/3+TK9JVMWnDolVx7ItX1k\\nygL4IU8Xvn9fZnnmmWfU9pUrVzRj+/btC2geoWK5atUqHD16FK2trZg5cybMZjMyMzPR1taG6Oho\\n5OXl3fLYWiKinsRjsTx06BD+9a9/oaioCA0NDZg4cSKSkpJgsViQmpqKNWvWoLi4GBbegp6IejCP\\nxfKRRx7BsGHDAAB9+vRBc3MzysrKsHTpUgBASkoKtmzZ4pdief36dU2/sbHR5+vwxzK9JVMWgHnc\\nkSkLINe/ja5kcTxVCNCeLnjHHdqfWMLDw9V2cLC2lDmeZuSrbePxB56goCD07t0bAFBcXIzHHnsM\\nzc3N6m53VFQU6urqfBKGiEhWwiel79u3D5s2bcKWLVswbtw4WK1WADcreFZWFgoLC11+tqKiAiaT\\nyTeJKTAMBsD/1yuQrPj930LoB56DBw8iPz8fBQUFiIiIQO/evWG32xEaGgqbzebxV2qz2Qyg81fw\\nDBo0SNP39fOIjx49iu9973s+Xaa3ZMoCAEcBufJItH1kygL4J4+3339Xszjvhj/77LNq2/mw3F//\\n+le17Wo3vLN5jh496nLMY7G8evUqVq1ahffffx/9+vUDAIwaNQolJSV49tlnUVpaiuTkZOEwndHS\\n0qLpX7t2zefr8McyvSVTFoB53JEpCyDXv42uZDl79qym/67gI3nd1QpfbRuPxXLv3r1oaGjAK6+8\\nor72xhtvIDc3F0VFRYiLi8OECRN8EoaISFYei+WUKVMwZcqUW17funWrXwIREclI6it4nH/yb2pq\\n8vk6bDabz5fpLZmyAMzjjkxZAP/k8XaZXcki09/DGa8NJyISwGJJRCSAxZKISIDUxyz79u2r6fv6\\nTukAEBMT4/NlekumLGhslCsP5No+MmUB/JCnC99/T902nFkSEQlgsSQiEsBiSUQkgMWSiEgAiyUR\\nkQAWSyIiASyWREQCWCyJiASwWBIRCWCxJCISIPXljkSO0tLS1PbevXs1YwUFBZr+xo0b1ba7RwUQ\\nieLMkohIAIslEZEA7oZTtxEeHq6233nnHc3YN998o+m/9NJLattx9x0Ali1b5od01NNxZklEJIDF\\nkohIAIslEZEAHrOkbuPJJ59U2ydOnNCMhYWFafo1NTVqOzY21r/B6FuBM0siIgEslkREArgbTt3G\\njBkz9I5A32KcWRIRCfA4s2xubkZ2djbq6+vR0tKC2bNnY8iQIcjMzERbWxuio6ORl5eHkJCQQOQl\\nItKFx2L56aefwmQyYcaMGaiursYvfvELjBw5EhaLBampqVizZg2Ki4thsVgCkZeISBced8PT0tLU\\nY0U1NTWIiYlBWVkZxowZAwBISUmB1Wr1b0oiIp0ZFEVRRN44depU1NbWIj8/Hz//+c/VAnn27Flk\\n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\\nAAAAAElFTkSuQmCC\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a791278>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAUsAAAFKCAYAAACU6307AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3XtwVOX9x/FPJMRACLeYAGEEvAba\\nBJFqW5BYUxAKWAVaBCMy1pGCXIyjSCBGCqUWuQ6CjKgQnKFFgtFBnOokxSmOQ0Mc0GJSNQptkVti\\nRAIICZJwfn/w4zQnmN0ny16e0Pdrxpnn2WfPOR924etzzp5LlOM4jgAAPl0R6QAA0BJQLAHAAMUS\\nAAxQLAHAAMUSAAxQLAHAQHS4NvTHP/5Re/bsUVRUlHJyctS3b99wbdr1+eefa+rUqXrwwQc1YcIE\\nHTlyRLNmzVJ9fb0SExO1ZMkSxcTEhCXL4sWLtXv3btXV1Wny5MlKS0uLWJaamhrNnj1bR48e1Zkz\\nZzR16lT17t07Ynkkqba2VnfddZemTp2qAQMGRCxLSUmJsrKydMMNN0iSbrzxRj388MMR/Wy2bt2q\\ntWvXKjo6Wo8++qhSUlIikue1117T1q1b3X5ZWZleffVVzZs3T5KUkpKi+fPnhzzHBadOnVJ2draO\\nHz+us2fPatq0aUpMTAxeHicMSkpKnN/+9reO4zjO3r17nXvvvTccm/U4deqUM2HCBCc3N9fZsGGD\\n4ziOM3v2bOftt992HMdxli1b5vz5z38OS5bi4mLn4YcfdhzHcb755hvnZz/7WcSyOI7j/OUvf3Fe\\neuklx3Ec5+DBg87QoUMjmsdxHGf58uXOmDFjnNdffz2iWXbu3OnMmDHD81ok83zzzTfO0KFDnZMn\\nTzqVlZVObm5uxL8rxzn/b3zevHnOhAkTnD179jiO4ziPP/64s3379rBl2LBhg7N06VLHcRynoqLC\\nGTZsWFDzhGU3vLi4WEOGDJEkXXfddTp+/Li+/fbbcGzaFRMTo5dffllJSUnuayUlJRo8eLAkKSMj\\nQ8XFxWHJcuutt+q5556TJLVv3141NTURyyJJI0aM0KRJkyRJR44cUZcuXSKaZ9++fdq7d6/uuOMO\\nSZH7npoSyTzFxcUaMGCA2rVrp6SkJC1YsMCKz2f16tWaNGmSDh065O41hjtLp06dVF1dLUk6ceKE\\nOnbsGNQ8YSmWX3/9tTp16uT2O3furKqqqnBs2hUdHa3Y2FjPazU1Ne7uSkJCQtgytWrVSm3btpUk\\nFRQU6Pbbb49YlobGjx+vmTNnKicnJ6J5Fi1apNmzZ7v9SH82e/fu1ZQpU3Tfffdpx44dEc1z8OBB\\n1dbWasqUKcrMzFRxcXHEP5+PP/5Y3bp1U6tWrdS+fXv39XBnGTlypA4fPqw777xTEyZM0KxZs4Ka\\nJ2zHLBtyLLzCMhKZtm3bpoKCAuXl5Wno0KERzSJJmzZt0qeffqonn3zSkyGcebZs2aJ+/frp6quv\\n/t7xcH82vXr10vTp0zV8+HAdOHBAEydOVH19fcTySFJ1dbWef/55HT58WBMnTozYd3VBQUGBRo8e\\nfdHr4c7y5ptvKjk5WevWrdNnn32madOmKT4+Pmh5wlIsk5KS9PXXX7v9r776SomJieHYtE9t27ZV\\nbW2tYmNjVVlZ6dlFD7X3339fa9as0dq1axUfHx/RLGVlZUpISFC3bt3Up08f1dfXKy4uLiJ5tm/f\\nrgMHDmj79u2qqKhQTExMRD+bLl26aMSIEZKkHj166KqrrlJpaWnE8iQkJOjmm29WdHS0evToobi4\\nOLVq1SpieaTzhyVyc3MVFRXl7gZLCnuWDz/8UIMGDZIk9e7dW2fOnFFdXV3Q8oRlN/y2225TYWGh\\nJOmf//ynkpKS1K5du3Bs2qeBAwe6uYqKipSenh6W7Z48eVKLFy/Wiy++qI4dO0Y0iyTt2rVLeXl5\\nks4fMjl9+nTE8qxYsUKvv/66Nm/erLFjx2rq1KkR/Wy2bt2qdevWSZKqqqp09OhRjRkzJmJ5Bg0a\\npJ07d+rcuXM6duxYRL8r6XwBiouLU0xMjFq3bq1rr71Wu3btikiWnj17as+ePZKkQ4cOKS4uTtdd\\nd13Q8kQ5YZorL126VLt27VJUVJR+97vfqXfv3uHYrKusrEyLFi3SoUOHFB0drS5dumjp0qWaPXu2\\nzpw5o+TkZC1cuFCtW7cOeZb8/HytWrVK11xzjfvas88+q9zc3LBnkc6fpvPUU0/pyJEjqq2t1fTp\\n05Wamqrs7OyI5Llg1apV6t69uwYNGhSxLN9++61mzpypEydO6OzZs5o+fbr69OkT0c9m06ZNKigo\\nkCQ98sgjSktLi1iesrIyrVixQmvXrpV0/vju3Llzde7cOd10002aM2dOWHJI508dysnJ0dGjR1VX\\n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\\nMkHQohkVy71792rKlCk6fvy4pk+frpqaGne3OyEhQVVVVSENCQCRFuU4juPrDZWVldq9e7eGDx+u\\nAwcOaOLEiTp9+rQ++OADSdL+/fuVnZ2tTZs2NbmOsrIypaamBjc5QisqSvL9VwOXM77/i/idWXbp\\n0sU91aJHjx666qqrVFpaqtraWsXGxqqysvKiUzMaS0tLkyQ5jtOsm7Z269bN04+Pjzde1kR5eblS\\nUlKCus5A2ZRFksolu/JY9PnYlEUKTZ5Av/+W/tmUl5c3Oeb31KGtW7dq3bp1kqSqqiodPXpUY8aM\\nUWFhoSSpqKhI6enpxmEAoCXyO7P8+c9/rpkzZ+rdd9/V2bNnNW/ePPXp00fZ2dnKz89XcnIyjyEF\\ncNnzWyzbtWunNWvWXPT6+vXrQxIIAGzEFTwAYIBiCQAGKJYAYIBiCQAGKJYAYIBiCQAGKJYAYIBi\\nCQAGKJYAYIBiCQAGKJYAYIBiCQAGKJYAYIBiCQAGAnpgGQCYavx0hCeffNJt5+fne8Z+8pOfePr7\\n9u1z27t37w5om08//bRnrKamxm0vW7bMeJ3MLAHAAMUSAAxQLAHAAMcsAYTUzJkzPf1z58657bFj\\nx3rGrrzySk9/8+bNAW3zwhNpJe8xysaeeOIJ43UyswQAAxRLADDAbjiAoGt46k50tLfMLFy40G3P\\nmTPHM/bJJ594+jfffLPb/uijj4y337dvX7e9dOlSz1jDbTbMIkmTJk1qcp3MLAHAAMUSAAxQLAHA\\nAMcsAQSd4zhuu/FxwYZ8jV2KC+t98MEHg7ZNZpYAYMBoZrl161atXbtW0dHRevTRR5WSkqJZs2ap\\nvr5eiYmJWrJkiWJiYkKdFQAixu/M8tixY1q9erU2btyoNWvW6N1339XKlSuVmZmpjRs3qmfPnioo\\nKAhHVgCIGL/Fsri4WAMGDFC7du2UlJSkBQsWqKSkRIMHD5YkZWRkqLi4OORBASCS/O6GHzx4ULW1\\ntZoyZYpOnDihGTNmqKamxt3tTkhIUFVVlc91lJaWKjU1VZL3wK8NysvLIx3BZVMWRUXZlUd2fT42\\nZZFCkOcSvv/L9bMxOmZZXV2t559/XocPH9bEiRM9Bc+k+KWlpbnvbXwjUF+6devm6cfHxxsva6K8\\nvFwpKSlBXWegbMoiSeWSXXks+nxsyiKFJk+g339L/2x8FVa/xTIhIUE333yzoqOj1aNHD8XFxalV\\nq1aqra1VbGysKisrlZSUZBymORr/aNSmTZugbyMU6wyUTVkk8vhiUxbJrn8bl+tn4/eY5aBBg7Rz\\n506dO3dOx44d0+nTpzVw4EAVFhZKkoqKipSenh6UMABgK78zyy5dumjYsGG69957JUm5ublKS0tT\\ndna28vPzlZycrFGjRoU8KABEktExy/Hjx2v8+PGe19avXx+SQABgI6svd2z8Y1DjWz0FQyjWGSib\\nskjk8cWmLJJd/zYu18+Gyx0BwADFEgAM2DVfbqTxOZx1dXVB30Yo1hkom7JI5PHFpiySXf82LtfP\\nhpklABigWAKAAYolABiw+phl42vBO3fu7LZvueUWz1jjvi/V1dXfu87GvvnmG+N1BouvPFOmTAlo\\nnW+//ban/+WXX7rtxg+g9/VA+lBozp83JyfHeL1r1qxpcizc32vjy+0a9nv06OEZGzFiREDbaEl/\\njxues92xY0fjde7atavJ/tmzZz1jJ0+eNF6vKWaWAGCAYgkABqzeDR8yZIinP2DAgKCst+HUP9Bd\\n20u5R15Tt4xqzm5mcwS0azdunKZNm+Z5qaKiwnjxhldf3Xjjjc3f/iUK9Hv9/PPP3bav2w/+6le/\\n8vS7du3q6Xfo0CGg7Qcq6H+P9+y56M/YWLj/Hgd66G3mzJme/r///e+Ats/MEgAMUCwBwADFEgAM\\nWH3M0mY23To/VBofdwv3cbhIMD2+erl8/77+HJfLn7HxExcC/XMxswQAA8ws8f169tS948ZFOsV/\\njRuneyOd4QKbskghyXMqMTHIa2z5KJb4fv/5jzZv3hzpFK57773Xmjw2ZZHsy3O5YjccAAxQLAHA\\nAMUSAAxclscsly9f7ukfP37c06+trZV0/ljPwoULv3dMuvhOJg37WVlZnrE33njDbU+cONEzNnny\\nZE//7rvvdtv333//9/8hLtGFRxdHeh3BFIo8jb/jxpd4NpVj27ZtQc/S2JVXXunpp6enh3ybaBoz\\nSwAwQLEEAAMUSwAwcFkes/zkk088/e7du3v6De+ivHfvXs/YunXr3HbDO6pL0jPPPOO2586d6xnr\\n16+f2/7ss888Y6NHj/b0Gx8nA2A/v8Xytdde09atW91+WVmZXn31Vc2bN0/S+ess58+fH7KAAGAD\\nv8Vy7NixGjt2rCTpgw8+0DvvvKNnnnlGOTk56tu3r5544gm99957+tnPfhbysAAQKc3aDV+9erUW\\nLlyoCRMmqG/fvpKkjIwMFRcXW1Us165da/zehrvdjTV+mNKSJUsCyvPTn/40oOUuxaVe/mbbJXTh\\nytP47vyX+j5cPox/4Pn444/VrVs3tWrVSu3bt3dfT0hIUFVVVUjCAYAtohxfDxppYO7cuRo5cqR6\\n9eqlyZMna8uWLZKkv//973r99de1bNmyJpctKytTampqcBIDQAQY74aXlJQoNzdXUVFRnl+JKysr\\nlZSU5HPZtLQ0SecfANXwQVb+PPbYY55+sB5YdoFNu5o2ZZHI44tNWSS78tiURWp+Hl9XiRnthldW\\nViouLk4xMTFq3bq1rr32WvcB50VFRVyG9T/o8OHDnv+Ay53RzLKqqkqdO3d2+zk5OZo7d67OnTun\\nm266SQMHDgxZQACwgVGxTE1N9fzCfP3112vjxo0hCwUAtrksr+BBaLz//vtuu7Ky0jMWFxfn6Q8f\\nPjwsmYBw4dpwADBAsQQAAxRLADDAMUt4nD592m3v2LHDM3bhEldJ6tChQ9gyATZgZgkABiiWAGCA\\n3XB4HDx40G3fdtttEUwC2IWZJQAYoFgCgAGKJQAYML6f5SVt5P9vy9bcW7SFmk15bMoikccXm7JI\\nduWxKYvU/Dy+yiEzSwAwQLEEAAMUSwAwwHmWCInrr7/ebe/du9cz1vBJoD169PCMffnll267a9eu\\nTa6/U6dOnv7QoUM9/YqKiiaXra2tddslJSVNvg9oiJklABigWAKAAXbDERTx8fGefsNnybdq1coz\\n9sknn7jtxrvTbdq0cduNd6X79evnttu1a+cZ279/v6efkJDgtt99913P2OjRo932D37wAzWl4R2Y\\nJGnbtm2e9Te8O3zDwwe4PDGzBAADFEsAMECxBAADHLNESJw6darJse7duwe0zobHQf/xj394xhqe\\njiRJ+/btc9u/+MUvmlznFVd45wvnzp1r8r0Nc3fv3l3V1dW+A+OywswSAAxQLAHAAHcdsiSPTVkk\\n8vhiUxbJrjw2ZZG46xAAhJ3fH3hOnTql7OxsHT9+XGfPntW0adOUmJioefPmSZJSUlI0f/78UOcE\\ngMhy/NiwYYOzdOlSx3Ecp6Kiwhk2bJgzYcIEZ8+ePY7jOM7jjz/ubN++3ec6JDkXNnWhbcN/NuWx\\nKQt5Wk4W2/LYlCWQPL743Q3v1KmTe4rEiRMn1LFjRx06dEh9+/aVJGVkZKi4uNjfagCgRfO7Gz5y\\n5Ei98cYbuvPOO3XixAm98MIL+v3vf++OJyQkeM5/+z6lpaVKTU2VJJ8HUCPBpjw2ZZHI44tNWSS7\\n8tiURQpeHr/F8s0331RycrLWrVunzz77TNOmTfPcNMEkSFpamvvelvxLWSjZlEUijy82ZZHsymNT\\nFqn5eXzVM7/F8sMPP9SgQYMj0vWqAAAA4ElEQVQkSb1799aZM2dUV1fnjldWViopKck4DAC0RH6P\\nWfbs2VN79uyRJB06dEhxcXG67rrrtGvXLklSUVGR0tPTQ5sSACLM70npp06dUk5Ojo4ePaq6ujpl\\nZWUpMTFRc+fO1blz53TTTTdpzpw5vjfCSel+2ZRFIo8vNmWR7MpjUxYpuLvhXMFjSR6bskjk8cWm\\nLJJdeWzKIgW3WHIFDwAYoFgCgAGKJQAYoFgCgAGKJQAYoFgCgAGKJQAYCMt5lgDQ0jGzBAADFEsA\\nMECxBAADFEsAMECxBAADFEsAMPB/eKspXICJ/eIAAAAASUVORK5CYII=\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a6f94e0>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\nywAAAABJRU5ErkJggg==\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a6b8940>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        },\n        {\n          \"output_type\": \"display_data\",\n          \"data\": {\n            \"image/png\": \"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\\nIgH/B/C/a99c8fqFAAAAAElFTkSuQmCC\\n\",\n            \"text/plain\": [\n              \"<matplotlib.figure.Figure at 0x7f864a677e80>\"\n            ]\n          },\n          \"metadata\": {\n            \"tags\": []\n          }\n        }\n      ]\n    },\n    {\n      \"metadata\": {\n        \"id\": \"jXpbN71BuK1z\",\n        \"colab_type\": \"code\",\n        \"colab\": {}\n      },\n      \"cell_type\": \"code\",\n      \"source\": [\n        \"\"\n      ],\n      \"execution_count\": 0,\n      \"outputs\": []\n    }\n  ]\n}"
  },
  {
    "path": "dimensionality_reduction/README.md",
    "content": "Install requirements:\n\n```\npip install click\npip install matplotlib==2.0.2\npip install mpldatacursor\n```\n\nFirst download data to the data path specified in JSON file and then run reducer:\n```\npython -m process state_reduce.json --download\n```\n\nIf you already downloaded data to the specified data path, simply run reducer as:\n```\npython -m process state_reduce.json\n```\n\nRun visualizer:\n```\npython -m visualize viz_state_2d.json\n```"
  },
  {
    "path": "dimensionality_reduction/process.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport click\nimport json\nimport numpy as np\nfrom process_helper import assemble_data, reduce_dim, disassemble, download_data\n\n\n@click.command()\n@click.argument('path_to_config', nargs=1)\n@click.option('--download', is_flag=True)\ndef main(path_to_config, download):\n    \"\"\"\n    PATH_TO_CONFIG: Path to config.json\n    \"\"\"\n    print(\"loading\", path_to_config)\n\n    with open(path_to_config) as f:\n        config = json.load(f)\n\n    print(config['data'])\n    print(config['method'])\n    print(config['data']['key'])\n\n    if download:\n        download_data(config['data'])\n\n    Xs, npz_files, npz_dims, _, _, _ = assemble_data(config['data'], dict_key=config['data']['key'])\n\n    X = np.vstack(Xs)\n\n    print(npz_files)\n    print(npz_dims)\n    print(X.shape)\n\n    X_r = reduce_dim(X, config['method'])\n\n    #print(X_r.shape)\n\n    disassemble(X_r, npz_files, npz_dims, config['method']['name'], dict_key=config['data']['key'])\n\nif __name__ == '__main__':\n    main()\n\n"
  },
  {
    "path": "dimensionality_reduction/process_helper.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nfrom collections import OrderedDict\nimport numpy as np\nfrom sklearn import decomposition, manifold\nimport atari_zoo\nfrom atari_zoo import MakeAtariModel\nimport urllib.request\nimport os\n\ndef download_data(data):\n    print(\"downloading data ...\")\n    env = data['game']\n    tag = \"final\"\n\n    algos_data = OrderedDict(data['algos'])\n    for algo in algos_data.keys():\n        for exp_idx in algos_data[algo]:\n            print(algo, exp_idx)\n            m = MakeAtariModel(algo,env,exp_idx,tag)()\n\n            path_to_npz = data['path'] + '/' + algo + '/' + data['game'] + '/'\n\n            filename = 'model' + str(exp_idx) + '_final_rollout.' + 'npz'\n\n            if not os.path.exists(path_to_npz):\n                os.makedirs(path_to_npz)\n\n            urllib.request.urlretrieve (m.data_path, path_to_npz+filename)\n\ndef assemble_data(data, ext=\".\", dict_key='ram'):\n    \"\"\"Assemble hi-D BCs from all generations\"\"\"\n\n\n    #1 reconstruct the data directories\n    X, npz_files, npz_dims = [], [], []\n    raw_data = {}\n\n    glo_max_score, glo_min_score = None, None\n\n    algos_data = OrderedDict(data['algos'])\n    for algo in algos_data.keys():\n        for exp_idx in algos_data[algo]:\n            path_to_npz = (data['path'] + '/' + algo + '/' + data['game'] + '/model'\n                + str(exp_idx) + '_final_rollout'+ext+'npz')\n            npz_files.append(path_to_npz)\n            #check if path exist\n            try:\n                npz_data = np.load(path_to_npz)\n            except:\n                raise IOError(\"Invalid path: {}. \\n If you want to re-download the data, please add --download\".format(path_to_npz))\n\n            if algo not in raw_data.keys():\n                raw_data[algo] = {}\n\n            raw_data[algo][str(exp_idx)] = npz_data\n            print(npz_data[dict_key].shape)\n            print(type(npz_data[dict_key]))\n\n            npz_dims.append(npz_data[dict_key].shape[0])\n            X.append(npz_data[dict_key])\n\n            if 'score' in npz_data.keys():\n                loc_max, loc_min = max(npz_data['score']), min(npz_data['score'])\n\n                if glo_max_score == None or loc_max > glo_max_score:\n                    glo_max_score = loc_max\n\n                if glo_min_score == None or loc_min < glo_min_score:\n                    glo_min_score = loc_min\n                print(loc_max, loc_min)\n\n    return X, npz_files, npz_dims, raw_data, glo_max_score, glo_min_score\n\ndef reduce_dim(X, method):\n    print(method)\n\n    print(\"Reducing ...\")\n\n    perplexity = 30\n    n_iter = 1000\n    pca_dim = 50\n    if 'tsne' in method['name']:\n        if 'perplexity' in method.keys():\n            perplexity = method['perplexity']\n        if 'n_iter' in method.keys():\n            n_iter = method['n_iter']\n        if 'pca_dim' in method.keys():\n            pca_dim = method['pca_dim']\n\n    print(perplexity, n_iter, pca_dim)\n\n    if method['name'] == 'tsne':\n        print('running tsne')\n        X_r = manifold.TSNE(n_components=2, perplexity=perplexity,\n                            verbose=2, random_state=0, n_iter=n_iter).fit_transform(X)\n    elif method['name'] == 'pca':\n        print('running pca')\n        X_r = decomposition.PCA(n_components=2).fit_transform(X)\n    elif method['name'] == 'pca_tsne':\n        print('running pca')\n        X_pca = decomposition.PCA(n_components=pca_dim).fit_transform(X)\n        print('running tsne')\n        X_r = manifold.TSNE(n_components=2, perplexity=perplexity,\n                            verbose=2, random_state=0, n_iter=n_iter).fit_transform(X_pca)\n    elif method['name'] == 'debug':\n        print('running debug')\n        nrow, ncol = X.shape\n        idx_last_x, idx_last_y = int(ncol / 2 - 1), -1\n        X_r = np.hstack((X[:, idx_last_x].reshape(nrow, 1), X[:, idx_last_y].reshape(nrow, 1)))\n    else:\n        raise NotImplementedError\n\n    print('Reduction Completed! X.shape={} X_r.shape={}'.format(X.shape, X_r.shape))\n    return X_r\n\n\ndef disassemble(X, files, dims, dr_method, dict_key='ram'):\n    print(dr_method)\n    dict_key_2d = dict_key+\"_2d\"\n    X_splitted = np.split(X, np.cumsum(dims)[:-1])\n    for x_2d, file in zip(X_splitted, files):\n        npz_name = file.split('.')[0] + '.' + dr_method + '.' + dict_key_2d\n        print(x_2d.shape, npz_name)\n        vals_to_save = {dict_key_2d:x_2d}\n\n        np.savez_compressed(npz_name, **vals_to_save)\n\n\n    if dr_method == \"debug\":\n        for file in files:\n            data = np.load(file)\n            npz_name = file.split('.')[0] + '.' + dr_method + '.' + dict_key_2d + '.npz'\n            data_2d = np.load(npz_name)\n\n            print(data[dict_key].shape)\n            print(data_2d[dict_key_2d].shape)\n\n            assert data[dict_key].shape[0] == data_2d[dict_key_2d].shape[0]\n            assert np.array_equal(data[dict_key][:, int(data[dict_key].shape[1] / 2 - 1) ],  data_2d[dict_key_2d][:, 0])\n            assert np.array_equal(data[dict_key][:, -1], data_2d[dict_key_2d][:, 1])\n\n\n\n\n"
  },
  {
    "path": "dimensionality_reduction/ram_reduce.json",
    "content": "{\n  \"data\": {\n    \"path\": \"/Users//data/rollout2\",\n    \"game\": \"SeaquestNoFrameskip-v4\",\n    \"key\": \"ram\",\n    \"algos\": {\n      \"a2c\": [1, 2, 3],\n      \"apex\": [1, 2, 3],\n      \"dqn\": [1, 2, 3],\n      \"es\":[1, 2, 3],\n      \"ga\":[1, 2, 3],\n      \"rainbow\":[1, 2, 3]\n    }\n  },\n  \"method\": {\n    \"name\": \"pca_tsne\",\n    \"pca_dim\": 50,\n    \"perplexity\": 30,\n    \"n_iter\": 3000\n  }\n}\n"
  },
  {
    "path": "dimensionality_reduction/representation_reduce.json",
    "content": "{\n  \"data\": {\n    \"path\": \"/Users/ailabs/data/rollout\",\n    \"game\": \"FrostbiteNoFrameskip-v4\",\n    \"key\": \"representation\",\n    \"algos\": {\n      \"a2c\": [3]\n    }\n  },\n  \"method\": {\n    \"name\": \"pca_tsne\",\n    \"pca_dim\": 50,\n    \"perplexity\": 30,\n    \"n_iter\": 1000\n  }\n}\n"
  },
  {
    "path": "dimensionality_reduction/visualize.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport click\nimport json\nfrom visualize_helper import figure_control\nimport matplotlib.pyplot as plt\n\n\n@click.command()\n@click.argument('path_to_config', nargs=1)\n@click.option('--global_max_min', is_flag=True, help=\"Will use global max/max across all exps for color intensity.\")\ndef main(path_to_config, global_max_min):\n    \"\"\"\n    PATH_TO_CONFIG: Path to config.json\n    \"\"\"\n    print(\"loading\", path_to_config)\n\n    with open(path_to_config) as f:\n        config = json.load(f)\n\n    print(config['data'])\n    print(config['method'])\n    print(global_max_min)\n\n    main_plot = figure_control(config, global_max_min)\n    plt.show()\n\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "dimensionality_reduction/visualize_helper.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport matplotlib.pyplot as plt\nfrom process_helper import assemble_data\nfrom matplotlib.widgets import CheckButtons\nimport numpy as np\nfrom colour import Color\nfrom mpldatacursor import datacursor\n\nartist2data = {}\nlabel2artist = {}\n\nCOLORS = [\n    (Color('#f9d9d9'), Color('#d61515')), # red\n    (Color('#d9ddfb'), Color('#0b1667')), # blue\n    (Color('#9aecb8'), Color('#045c24')), # green\n    (Color('#ffbef9'), Color('#ce00bb')), # pink\n    (Color('#ffb27e'), Color('#fb6500')), # orange\n    (Color('#d0d0d0'), Color('#000000')), # black\n    (Color('#beffcf'), Color('#33FF66')), # lime green\n    (Color('#f2d6b9'), Color('#996633')), # brown\n    (Color('#d5b2ec'), Color('#9900FF')), # purple\n    (Color('#baffff'), Color('#009999')), # teel\n]\n\nnumBins = 255\nCOLOR_HEX_LISTS = []\nfor color in COLORS:\n    color_gradient = color[0].range_to(color[1], numBins)\n    hex_list = [c.get_hex_l() for c in color_gradient]\n    COLOR_HEX_LISTS.append(hex_list)\n\ndef color_index(fitness, minfit, maxfit):\n    cind = (fitness - minfit)/(maxfit - minfit) * numBins\n    cind = int(cind)\n    if cind >= numBins:\n        cind = numBins-1\n    elif cind < 0:\n        cind = 0\n\n    return cind\n\ndef color_list(color_idx, scores, global_limit=None):\n    this_color = COLOR_HEX_LISTS[color_idx]\n    if global_limit:\n        loc_max, loc_min = global_limit\n    else:\n        loc_max, loc_min = max(scores), min(scores)\n\n    hex_list = []\n    for s in scores:\n        hex_list.append(this_color[color_index(s, loc_min, loc_max)])\n    return hex_list\n\ndef checkb_click(label):\n\n    print(\"clicked\", label)\n    artist = label2artist[label]\n    artist.set_visible(not artist.get_visible())\n\n    visible = artist.get_visible()\n    if visible:\n        artist.set_picker(5)\n    else:\n        artist.set_picker(None)\n    plt.draw()\n\n\nclass figure_control:\n    def __init__(self, config, global_max_min):\n        self.config = config\n        print(config)\n\n        _, _, _, self.raw_data, self.glo_max_score, self.glo_min_score = assemble_data(config['data'])\n\n        Xs, npz_files, npz_dims, _, _, _ = assemble_data(config['data'],\n            ext='.' + config['method']['name'] + '.'+config['data']['key'] + '.', dict_key=config['data']['key'])\n\n\n        print(self.glo_max_score, self.glo_min_score)\n        print(npz_dims, npz_files)\n        self.fig = plt.figure(config['data']['key'].upper(), figsize=(14,7))\n        self.ax = self.fig.add_subplot(111)\n        plt.subplots_adjust(left  = 0.5, right = 0.9)\n        self.fig.canvas.mpl_connect('pick_event', self.onpick)\n\n\n        checkb_labels = []\n        idx = 0\n        list_of_artists = []\n        labels_cursor = {}\n        for data, file in zip(Xs, npz_files):\n            print(data.shape)\n            algo = file.split('/')[-3]\n            rollout = int(file.split('/')[-1].split('_')[0][-1])\n            scores = self.raw_data[algo][str(rollout)]['score']\n            if global_max_min:\n                global_limit = (self.glo_max_score, self.glo_min_score)\n            else:\n                global_limit = None\n            hex_list = color_list(idx%len(COLORS), scores, global_limit=global_limit )\n            artist = self.ax.scatter(data[:, 0], data[:, 1], c=hex_list, visible=False)\n\n            list_of_artists.append(artist)\n            labels_cursor[artist]=[]\n            for i in range(data.shape[0]):\n                labels_cursor[artist].append(algo.upper() + \" r\" + str(rollout)\n                                             + \" s\"+str(i) + \": \"+str(scores[i]))\n\n            #artist.set_visible(True)\n            #artist.set_picker(5)\n            artist2data[artist] = (algo, rollout)\n\n            label = algo.upper() + \" rollout#\" + str(rollout)\n            label2artist[label] = artist\n            checkb_labels.append(label)\n            idx += 1\n\n        formatter = lambda **kwargs: ', '.join(kwargs['point_label'])\n        self.dc = datacursor(list_of_artists, hover=True, formatter=formatter,\n                             point_labels=labels_cursor)\n\n\n        checkb_ax = self.fig.add_axes([0.1, 0.1, 0.4, 0.8])\n        checkb_ax.axis('off')\n        self.checkb = CheckButtons(checkb_ax,\n                                    checkb_labels, [False]*len(checkb_labels))\n        self.checkb.on_clicked(checkb_click)\n\n\n    def pop_frame(self, algo, rollout, index):\n        fig = plt.figure(figsize=(3, 3))\n        ax = fig.add_subplot(111)\n        fig.suptitle(algo + \" rollout #\" + str(rollout)\n                     + \" step \" + str(index)\n                     + \" score \"+str(self.raw_data[algo][str(rollout)]['score'][index]))\n        print(algo, rollout, index)\n        ax.imshow(self.raw_data[algo][str(rollout)]['frames'][index])\n        fig.show()\n\n\n    def onpick(self, event):\n        print(hasattr(event, 'ind'))\n        print(hasattr(event, 'artist'))\n        if hasattr(event, 'ind') and hasattr(event, 'artist'):\n            print(\"picked\", event.ind)\n            index = event.ind[-1]\n            algo, rollout = artist2data[event.artist]\n            print(index)\n            print(artist2data[event.artist])\n            print(event.artist.get_offsets()[index])\n            self.pop_frame(algo, rollout, index)\n"
  },
  {
    "path": "dimensionality_reduction/viz_ram_2d.json",
    "content": "{\n  \"data\": {\n    \"path\": \"/data/rollout2\",\n    \"game\": \"SeaquestNoFrameskip-v4\",\n    \"key\": \"ram_2d\",\n    \"algos\": {\n      \"a2c\": [1, 2, 3],\n      \"apex\": [1, 2, 3],\n      \"dqn\": [1, 2, 3],\n      \"es\":[1, 2, 3],\n      \"ga\":[1, 2, 3],\n      \"rainbow\":[1, 2, 3]\n    }\n  },\n  \"method\": {\n    \"name\": \"pca_tsne\"\n  }\n}\n"
  },
  {
    "path": "dimensionality_reduction/viz_representation_2d.json",
    "content": "{\n  \"data\": {\n    \"path\": \"/Users//data/rollout\",\n    \"game\": \"SeaquestNoFrameskip-v4\",\n    \"key\": \"representation_2d\",\n    \"algos\": {\n      \"apex\": [3]\n    }\n  },\n  \"method\": {\n    \"name\": \"pca_tsne\"\n  }\n}\n"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.bar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Bar=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),data=conf.data,parseConfObjectForOptions=true}else{var id=conf,canvas=document.getElementById(id),data=arguments[1]}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.type='bar';this.max=0;this.stackedOrGrouped=false;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.original_colors=[];this.cachedBackgroundCanvas=null;this.firstDraw=true;this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.width':1,'chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':20,'chart.background.grid.dashed':false,'chart.background.grid.dotted':false,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.background.hbars':null,'chart.numyticks':10,'chart.hmargin':5,'chart.hmargin.grouped':1,'chart.strokecolor':'rgba(0,0,0,0)','chart.axis.color':'black','chart.axis.linewidth':1,'chart.gutter.top':25,'chart.gutter.bottom':35,'chart.gutter.left':25,'chart.gutter.right':25,'chart.labels':null,'chart.labels.bold':false,'chart.labels.color':null,'chart.labels.ingraph':null,'chart.labels.above':false,'chart.labels.above.decimals':0,'chart.labels.above.size':null,'chart.labels.above.color':null,'chart.labels.above.background':'rgba(0,0,0,0)','chart.labels.above.angle':null,'chart.labels.above.offset':4,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.ylabels':true,'chart.ylabels.count':5,'chart.ylabels.inside':false,'chart.ylabels.offsetx':0,'chart.ylabels.offsety':0,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.xaxispos':'bottom','chart.yaxispos':'left','chart.text.angle':0,'chart.text.color':'black','chart.text.size':12,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.ymin':0,'chart.ymax':null,'chart.title':'','chart.title.font':null,'chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.color':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':null,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.colors':['red','#0f0','blue','pink','orange','cyan','black','white','green','magenta'],'chart.colors.sequential':false,'chart.colors.reverse':false,'chart.grouping':'grouped','chart.variant':'bar','chart.variant.sketch.verticals':true,'chart.variant.threed.xaxis':true,'chart.variant.threed.yaxis':true,'chart.variant.threed.angle':0.1,'chart.variant.threed.offsetx':10,'chart.variant.threed.offsety':5,'chart.shadow':false,'chart.shadow.color':'#aaa','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.tooltips.highlight':true,'chart.tooltips.hotspot.xonly':false,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.halign':'right','chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.text.size':10,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.text.color':'black','chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.round':false,'chart.scale.zerostart':true,'chart.crosshairs':false,'chart.crosshairs.color':'#333','chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.linewidth':1,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.resizable':false,'chart.resize.handle.background':null,'chart.adjustable':false,'chart.adjustable.only':null,'chart.noaxes':false,'chart.noxaxis':false,'chart.noyaxis':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.numxticks':null,'chart.bevel':false,'chart.errorbars':false,'chart.errorbars.color':'black','chart.errorbars.capped':true,'chart.errorbars.capped.width':14,'chart.errorbars.linewidth':1,'chart.combinedchart.effect':null,'chart.combinedchart.effect.options':null,'chart.combinedchart.effect.callback':null,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[BAR] No canvas support');return;}\nfor(var i=0;i<data.length;++i){if(typeof data[i]==='string'){data[i]=parseFloat(data[i]);}else if(typeof data[i]==='object'&&data[i]){for(var j=0;j<data[i].length;++j){if(typeof data[i][j]==='string'){data[i][j]=parseFloat(data[i][j]);}}}else if(typeof data[i]==='undefined'){data[i]=null;}}\nfor(var i=0;i<data.length;++i){if(typeof data[i]==='object'&&!RGraph.is_null(data[i])){this.stackedOrGrouped=true;}}\nvar linear_data=RGraph.arrayLinearize(data);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}\nthis.data=data;this.original_data=RGraph.arrayClone(data);this.coords=[];this.coords2=[];this.coordsText=[];this.data_arr=RGraph.arrayLinearize(this.data);if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof arguments[0]==='object'){RG.parseObjectStyleConfig(this,arguments[0]);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name==='chart.xlabels.offset'){name='chart.labels.offsety';}\nif(name=='chart.labels.abovebar'){name='chart.labels.above';}\nif(name=='chart.strokestyle'){name='chart.strokecolor';}\nif(name=='chart.xaxispos'){if(value!='bottom'&&value!='center'&&value!='top'){alert('[BAR] ('+this.id+') chart.xaxispos should be top, center or bottom. Tried to set it to: '+value+' Changing it to center');value='center';}\nif(value=='top'){for(var i=0;i<this.data.length;++i){if(typeof(this.data[i])=='number'&&this.data[i]>0){alert('[BAR] The data element with index '+i+' should be negative');}}}}\nif(name.toLowerCase()=='chart.linewidth'&&value==0){value=0.0001;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name];};this.draw=this.Draw=function()\n{if(typeof(prop['chart.background.image'])=='string'){RG.DrawBackgroundImage(this);}\nRG.FireCustomEvent(this,'onbeforedraw');if(prop['chart.variant']==='3d'){if(prop['chart.text.accessible']){}else{co.setTransform(1,prop['chart.variant.threed.angle'],0,1,0.5,0.5);}}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];if((prop['chart.variant']=='pyramid'||prop['chart.variant']=='dot')&&typeof(prop['chart.tooltips'])=='object'&&prop['chart.tooltips']&&prop['chart.tooltips'].length>0){alert('[BAR] ('+this.id+') Sorry, tooltips are not supported with dot or pyramid charts');}\nthis.coords=[];this.coords2=[];this.coordsText=[];this.max=0;this.grapharea=ca.height-this.gutterTop-this.gutterBottom;this.halfgrapharea=this.grapharea/2;this.halfTextHeight=prop['chart.text.size']/2;RG.background.Draw(this);this.drawbars();this.drawAxes();this.DrawLabels();if(prop['chart.bevel']||prop['chart.bevelled']){this.DrawBevel();}\nif(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.errorbars']){this.drawErrorbars();}\nif(prop['chart.labels.ingraph']){RG.DrawInGraphLabels(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawAxes=this.DrawAxes=function()\n{if(prop['chart.noaxes']){return;}\nvar xaxispos=prop['chart.xaxispos'];var yaxispos=prop['chart.yaxispos'];var isSketch=prop['chart.variant']=='sketch';co.beginPath();co.strokeStyle=prop['chart.axis.color'];co.lineWidth=prop['chart.axis.linewidth']+0.001;if(RG.ISSAFARI==-1){co.lineCap='square';}\nif(prop['chart.noyaxis']==false){if(yaxispos=='right'){co.moveTo(ca.width-this.gutterRight+(isSketch?3:0),this.gutterTop-(isSketch?3:0));co.lineTo(ca.width-this.gutterRight-(isSketch?2:0),ca.height-this.gutterBottom+(isSketch?5:0));}else{co.moveTo(this.gutterLeft-(isSketch?2:0),this.gutterTop-(isSketch?5:0));co.lineTo(this.gutterLeft-(isSketch?1:0),ca.height-this.gutterBottom+(isSketch?5:0));}}\nif(prop['chart.noxaxis']==false){if(xaxispos=='center'){co.moveTo(this.gutterLeft-(isSketch?5:0),Math.round(((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop+(isSketch?2:0)));co.lineTo(ca.width-this.gutterRight+(isSketch?5:0),Math.round(((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop-(isSketch?2:0)));}else if(xaxispos=='top'){co.moveTo(this.gutterLeft-(isSketch?3:0),this.gutterTop-(isSketch?3:0));co.lineTo(ca.width-this.gutterRight+(isSketch?5:0),this.gutterTop+(isSketch?2:0));}else{co.moveTo(this.gutterLeft-(isSketch?5:0),ma.round(this.getYCoord(0)-(isSketch?2:0)));co.lineTo(ca.width-this.gutterRight+(isSketch?8:0),ma.round(this.getYCoord(0)+(isSketch?2:0)));}}\nvar numYTicks=prop['chart.numyticks'];if(prop['chart.noyaxis']==false&&!isSketch){var yTickGap=(ca.height-this.gutterTop-this.gutterBottom)/numYTicks;var xpos=yaxispos=='left'?this.gutterLeft:ca.width-this.gutterRight;if(this.properties['chart.numyticks']>0){for(y=this.gutterTop;xaxispos=='center'?y<=(ca.height-this.gutterBottom):y<(ca.height-this.gutterBottom+(xaxispos=='top'?1:0));y+=yTickGap){if(xaxispos=='center'&&y==(this.gutterTop+(this.grapharea/2))){continue;}\nif(xaxispos=='top'&&y==this.gutterTop){continue;}\nco.moveTo(xpos+(yaxispos=='left'?0:0),ma.round(y));co.lineTo(xpos+(yaxispos=='left'?-3:3),ma.round(y));}\nif(xaxispos==='bottom'&&prop['chart.ymin']!==0){co.moveTo(xpos+(yaxispos=='left'?0:0),ma.round(ca.height-prop['chart.gutter.bottom']));co.lineTo(xpos+(yaxispos=='left'?-3:3),ma.round(ca.height-prop['chart.gutter.bottom']));}}\nif(prop['chart.noxaxis']){if(xaxispos=='center'){co.moveTo(xpos+(yaxispos=='left'?-3:3),Math.round(ca.height/2));co.lineTo(xpos,Math.round(ca.height/2));}else if(xaxispos=='top'){co.moveTo(xpos+(yaxispos=='left'?-3:3),Math.round(this.gutterTop));co.lineTo(xpos,Math.round(this.gutterTop));}else{co.moveTo(xpos+(yaxispos=='left'?-3:3),Math.round(ca.height-this.gutterBottom));co.lineTo(xpos,Math.round(ca.height-this.gutterBottom));}}}\nif(prop['chart.noxaxis']==false&&!isSketch){if(typeof(prop['chart.numxticks'])=='number'){var xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];}else{var xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/this.data.length;}\nif(xaxispos=='bottom'){yStart=prop['chart.ymin']<0?this.getYCoord(0)-3:this.getYCoord(0);yEnd=this.getYCoord(0)+3;}else if(xaxispos=='top'){yStart=this.gutterTop-3;yEnd=this.gutterTop;}else if(xaxispos=='center'){yStart=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop+3;yEnd=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop-3;}\nvar noEndXTick=prop['chart.noendxtick'];for(x=this.gutterLeft+(yaxispos=='left'?xTickGap:0),len=(ca.width-this.gutterRight+(yaxispos=='left'?5:0));x<len;x+=xTickGap){if(yaxispos=='left'&&!noEndXTick&&x>this.gutterLeft){co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}else if(yaxispos=='left'&&noEndXTick&&x>this.gutterLeft&&x<(ca.width-this.gutterRight)){co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}else if(yaxispos=='right'&&x<(ca.width-this.gutterRight)&&!noEndXTick){co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}else if(yaxispos=='right'&&x<(ca.width-this.gutterRight)&&x>(this.gutterLeft)&&noEndXTick){co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}}\nif(prop['chart.noyaxis']||prop['chart.numxticks']==null){if(typeof(prop['chart.numxticks'])=='number'&&prop['chart.numxticks']>0){co.moveTo(Math.round(this.gutterLeft),yStart);co.lineTo(Math.round(this.gutterLeft),yEnd);}}}\nif(prop['chart.noyaxis']&&prop['chart.noxaxis']==false&&prop['chart.numxticks']==null){if(xaxispos=='center'){co.moveTo(ma.round(this.gutterLeft),(ca.height/2)-3);co.lineTo(ma.round(this.gutterLeft),(ca.height/2)+3);}else{co.moveTo(ma.round(this.gutterLeft),ca.height-this.gutterBottom);co.lineTo(ma.round(this.gutterLeft),ca.height-this.gutterBottom+3);}}\nco.stroke();};this.drawbars=this.Drawbars=function()\n{co.lineWidth=prop['chart.linewidth'];co.strokeStyle=prop['chart.strokecolor'];co.fillStyle=prop['chart.colors'][0];var prevX=0,prevY=0,decimals=prop['chart.scale.decimals'];if(prop['chart.ymax']){this.scale2=RG.getScale2(this,{'max':prop['chart.ymax'],'strict':prop['chart.scale.round']?false:true,'min':prop['chart.ymin'],'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});}else{var errorbars=prop['chart.errorbars'];if(typeof errorbars==='number'){var value=errorbars;prop['chart.errorbars']=[];for(var i=0;i<this.data.length;++i){if(typeof this.data[i]==='number'){prop['chart.errorbars'].push([value,null]);}else if(typeof this.data[i]==='object'&&!RG.isNull(this.data[i])){for(var j=0;j<this.data[i].length;++j){prop['chart.errorbars'].push([value,null]);}}}\nerrorbars=prop['chart.errorbars'];}\nfor(i=0;i<this.data.length;++i){if(typeof(this.data[i])=='object'){var value=prop['chart.grouping']==='grouped'?Number(RG.arrayMax(this.data[i],true)):Number(RG.array_sum(this.data[i]));}else{var value=Number(this.data[i]);}\nthis.max=ma.max(ma.abs(this.max),ma.abs(value)+\nNumber((typeof prop['chart.errorbars']==='object'&&typeof prop['chart.errorbars'][i]==='object'&&!RG.isNull(prop['chart.errorbars'][i])&&typeof prop['chart.errorbars'][i][0]==='number')?prop['chart.errorbars'][i][0]:0));}\nthis.scale2=RGraph.getScale2(this,{'max':this.max,'min':prop['chart.ymin'],'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;}\nif(prop['chart.adjustable']&&!prop['chart.ymax']){this.Set('chart.ymax',this.scale2.max);}\nif(prop['chart.background.hbars']&&prop['chart.background.hbars'].length>0){RGraph.DrawBars(this);}\nvar variant=prop['chart.variant'];if(variant==='3d'){RG.draw3DAxes(this);}\nvar xaxispos=prop['chart.xaxispos'],width=(ca.width-this.gutterLeft-this.gutterRight)/this.data.length,orig_height=height,hmargin=prop['chart.hmargin'],shadow=prop['chart.shadow'],shadowColor=prop['chart.shadow.color'],shadowBlur=prop['chart.shadow.blur'],shadowOffsetX=prop['chart.shadow.offsetx'],shadowOffsetY=prop['chart.shadow.offsety'],strokeStyle=prop['chart.strokecolor'],colors=prop['chart.colors'],sequentialColorIndex=0\nvar height;for(i=0,len=this.data.length;i<len;i+=1){if(RG.arraySum(this.data[i])<0){var height=(RG.arraySum(this.data[i])+this.scale2.min)/(this.scale2.max-this.scale2.min);}else{var height=(RG.arraySum(this.data[i])-this.scale2.min)/(this.scale2.max-this.scale2.min);}\nheight*=ma.abs(this.getYCoord(this.scale2.max)-this.getYCoord(this.scale2.min));var x=(i*width)+this.gutterLeft;var y=xaxispos=='center'?((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop-height:ca.height-height-this.gutterBottom;if(xaxispos=='top'){y=this.gutterTop+ma.abs(height);}\nif(height<0){y+=height;height=ma.abs(height);}\nif(shadow){co.shadowColor=shadowColor;co.shadowBlur=shadowBlur;co.shadowOffsetX=shadowOffsetX;co.shadowOffsetY=shadowOffsetY;}\nco.beginPath();if(typeof this.data[i]=='number'){if(xaxispos==='bottom'&&prop['chart.ymin']<0){if(this.data[i]>=0){height=ma.abs(this.getYCoord(0)-this.getYCoord(this.data[i]));}else{y=this.getYCoord(0);height=ma.abs(this.getYCoord(0)-this.getYCoord(this.data[i]));}}\nvar barWidth=width-(2*hmargin);if(barWidth<0){alert('[RGRAPH] Warning: you have a negative bar width. This may be caused by the chart.hmargin being too high or the width of the canvas not being sufficient.');}\nco.strokeStyle=strokeStyle;co.fillStyle=colors[0];if(prop['chart.colors.sequential']){co.fillStyle=colors[i];}\nif(variant=='sketch'){co.lineCap='round';var sketchOffset=3;co.beginPath();co.strokeStyle=colors[0];if(prop['chart.colors.sequential']){co.strokeStyle=colors[i];}\nco.moveTo(x+hmargin+2,y+height-2);co.lineTo(x+hmargin-1,y-4);co.moveTo(x+hmargin-3,y+ -2+(this.data[i]<0?height:0));co.bezierCurveTo(x+((hmargin+width)*0.33),y+15+(this.data[i]<0?height-10:0),x+((hmargin+width)*0.66),y+5+(this.data[i]<0?height-10:0),x+hmargin+width+ -1,y+0+(this.data[i]<0?height:0));co.moveTo(x+hmargin+width-5,y-5);co.lineTo(x+hmargin+width-3,y+height-3);if(prop['chart.variant.sketch.verticals']){for(var r=0.2;r<=0.8;r+=0.2){co.moveTo(x+hmargin+width+(r>0.4?-1:3)-(r*width),y-1);co.lineTo(x+hmargin+width-(r>0.4?1:-1)-(r*width),y+height+(r==0.2?1:-2));}}\nco.stroke();}else if(variant=='bar'||variant=='3d'||variant=='glass'||variant=='bevel'){if(RGraph.ISOLD&&shadow){this.DrawIEShadow([x+hmargin,y,barWidth,height]);}\nif(variant=='glass'){RGraph.filledCurvyRect(co,x+hmargin,y,barWidth,height,3,this.data[i]>0,this.data[i]>0,this.data[i]<0,this.data[i]<0);RGraph.strokedCurvyRect(co,x+hmargin,y,barWidth,height,3,this.data[i]>0,this.data[i]>0,this.data[i]<0,this.data[i]<0);}else{co.beginPath();co.rect(x+hmargin,y,barWidth,height);co.fill();RG.NoShadow(this);co.beginPath();co.rect(x+hmargin,y,barWidth,height);co.stroke();}\nif(variant=='3d'){var prevStrokeStyle=co.strokeStyle;var prevFillStyle=co.fillStyle;if(this.data[i]>=0){co.beginPath();co.moveTo(x+hmargin,y);co.lineTo(x+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']);co.lineTo(x+hmargin+prop['chart.variant.threed.offsetx']+barWidth,y-prop['chart.variant.threed.offsety']);co.lineTo(x+hmargin+barWidth,y);co.closePath();co.stroke();co.fill();}\nco.beginPath();co.moveTo(x+hmargin+barWidth,y);co.lineTo(x+hmargin+barWidth+prop['chart.variant.threed.offsetx'],this.data[i]<0&&xaxispos==='bottom'?this.getYCoord(0):(this.data[i]<0&&(y-prop['chart.variant.threed.offsety'])<(this.gutterTop+this.halfgrapharea)?(this.gutterTop+this.halfgrapharea):(y-prop['chart.variant.threed.offsety'])));co.lineTo(x+hmargin+barWidth+prop['chart.variant.threed.offsetx'],this.data[i]<0&&(y-prop['chart.variant.threed.offsety']+height)<(this.gutterTop+this.getYCoord(0))?this.getYCoord(this.data[i])-prop['chart.variant.threed.offsety']:(this.data[i]>0?y-prop['chart.variant.threed.offsety']+height:ma.min(y-prop['chart.variant.threed.offsety']+height,ca.height-this.gutterBottom)));co.lineTo(x+hmargin+barWidth,y+height);co.closePath();co.stroke();co.fill();if(this.data[i]>0){co.beginPath();co.fillStyle='rgba(255,255,255,0.5)';co.moveTo(x+hmargin,y);co.lineTo(x+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']);co.lineTo(x+hmargin+prop['chart.variant.threed.offsetx']+barWidth,y-prop['chart.variant.threed.offsety']);co.lineTo(x+hmargin+barWidth,y);co.lineTo(x+hmargin,y);co.closePath();co.stroke();co.fill();}\nco.beginPath();co.fillStyle='rgba(0,0,0,0.4)';co.moveTo(x+hmargin+barWidth,y);co.lineTo(x+hmargin+barWidth+prop['chart.variant.threed.offsetx'],this.data[i]<0&&xaxispos==='bottom'?this.getYCoord(0):(this.data[i]<0&&(y-prop['chart.variant.threed.offsety'])<(this.gutterTop+this.halfgrapharea)?(this.gutterTop+this.halfgrapharea):y-prop['chart.variant.threed.offsety']));co.lineTo(x+hmargin+barWidth+prop['chart.variant.threed.offsetx'],this.data[i]<0&&(y-prop['chart.variant.threed.offsety']+height)<this.getYCoord(0)?this.getYCoord(0):this.data[i]>0?y-prop['chart.variant.threed.offsety']+height:ma.min(y-prop['chart.variant.threed.offsety']+height,ca.height-this.gutterBottom));co.lineTo(x+hmargin+barWidth,y+height);co.lineTo(x+hmargin+barWidth,y);co.closePath();co.stroke();co.fill();co.strokeStyle=prevStrokeStyle;co.fillStyle=prevFillStyle;}else if(variant=='glass'){var grad=co.createLinearGradient(x+hmargin,y,x+hmargin+(barWidth/2),y);grad.addColorStop(0,'rgba(255,255,255,0.9)');grad.addColorStop(1,'rgba(255,255,255,0.5)');co.beginPath();co.fillStyle=grad;co.fillRect(x+hmargin+2,y+(this.data[i]>0?2:0),(barWidth/2)-2,height-2);co.fill();}}else if(variant=='dot'){co.beginPath();co.moveTo(x+(width/2),y);co.lineTo(x+(width/2),y+height);co.stroke();co.beginPath();co.fillStyle=this.properties['chart.colors'][i];co.arc(x+(width/2),y+(this.data[i]>0?0:height),2,0,6.28,0);co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors.sequential']){co.fillStyle=colors[i];}\nco.stroke();co.fill();}else{alert('[BAR] Warning! Unknown chart.variant: '+variant);}\nthis.coords.push([x+hmargin,y,width-(2*hmargin),height]);if(typeof this.coords2[i]=='undefined'){this.coords2[i]=[];}\nthis.coords2[i].push([x+hmargin,y,width-(2*hmargin),height]);}else if(this.data[i]&&typeof(this.data[i])=='object'&&prop['chart.grouping']=='stacked'){if(this.scale2.min){alert(\"[ERROR] Stacked Bar charts with a Y min are not supported\");}\nvar barWidth=width-(2*hmargin);var redrawCoords=[];var startY=0;var dataset=this.data[i];if(barWidth<0){alert('[RGRAPH] Warning: you have a negative bar width. This may be caused by the chart.hmargin being too high or the width of the canvas not being sufficient.');}\nfor(j=0;j<dataset.length;++j){if(xaxispos=='center'){alert(\"[BAR] It's pointless having the X axis position at the center on a stacked bar chart.\");return;}\nif(this.data[i][j]<0){alert('[BAR] Negative values are not permitted with a stacked bar chart. Try a grouped one instead.');return;}\nco.strokeStyle=strokeStyle\nco.fillStyle=colors[j];if(prop['chart.colors.reverse']){co.fillStyle=colors[this.data[i].length-j-1];}\nif(prop['chart.colors.sequential']&&colors[sequentialColorIndex]){co.fillStyle=colors[sequentialColorIndex++];}else if(prop['chart.colors.sequential']){co.fillStyle=colors[sequentialColorIndex-1];}\nvar height=(dataset[j]/this.scale2.max)*(ca.height-this.gutterTop-this.gutterBottom);if(xaxispos=='center'){height/=2;}\nvar totalHeight=(RGraph.array_sum(dataset)/this.scale2.max)*(ca.height-hmargin-this.gutterTop-this.gutterBottom);this.coords.push([x+hmargin,y,width-(2*hmargin),height]);if(typeof this.coords2[i]=='undefined'){this.coords2[i]=[];}\nthis.coords2[i].push([x+hmargin,y,width-(2*hmargin),height]);if(RGraph.ISOLD&&shadow){this.DrawIEShadow([x+hmargin,y,width-(2*hmargin),height+1]);}\nif(height>0){co.strokeRect(x+hmargin,y,width-(2*hmargin),height);co.fillRect(x+hmargin,y,width-(2*hmargin),height);}\nif(j==0){var startY=y;var startX=x;}\nif(shadow){redrawCoords.push([x+hmargin,y,width-(2*hmargin),height,co.fillStyle]);}\nif(variant=='3d'){var prevFillStyle=co.fillStyle;var prevStrokeStyle=co.strokeStyle;if(j==0){co.beginPath();co.moveTo(startX+hmargin,y);co.lineTo(startX+prop['chart.variant.threed.offsetx']+hmargin,y-prop['chart.variant.threed.offsety']);co.lineTo(startX+prop['chart.variant.threed.offsetx']+barWidth+hmargin,y-prop['chart.variant.threed.offsety']);co.lineTo(startX+barWidth+hmargin,y);co.closePath();co.fill();co.stroke();}\nco.beginPath();co.moveTo(startX+barWidth+hmargin,y);co.lineTo(startX+barWidth+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']);co.lineTo(startX+barWidth+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']+height);co.lineTo(startX+barWidth+hmargin,y+height);co.closePath();co.fill();co.stroke();if(j==0){co.fillStyle='rgba(255,255,255,0.5)';co.beginPath();co.moveTo(startX+hmargin,y);co.lineTo(startX+prop['chart.variant.threed.offsetx']+hmargin,y-prop['chart.variant.threed.offsety']);co.lineTo(startX+prop['chart.variant.threed.offsetx']+barWidth+hmargin,y-prop['chart.variant.threed.offsety']);co.lineTo(startX+barWidth+hmargin,y);co.closePath();co.fill();co.stroke();}\nco.fillStyle='rgba(0,0,0,0.4)';co.beginPath();co.moveTo(startX+barWidth+hmargin,y);co.lineTo(startX+barWidth+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']);co.lineTo(startX+barWidth+hmargin+prop['chart.variant.threed.offsetx'],y-prop['chart.variant.threed.offsety']+height);co.lineTo(startX+barWidth+hmargin,y+height);co.closePath();co.fill();co.stroke();co.strokeStyle=prevStrokeStyle;co.fillStyle=prevFillStyle;}\ny+=height;}\nif(shadow){RGraph.NoShadow(this);for(k=0;k<redrawCoords.length;++k){co.strokeStyle=strokeStyle;co.fillStyle=redrawCoords[k][4];co.strokeRect(redrawCoords[k][0],redrawCoords[k][1],redrawCoords[k][2],redrawCoords[k][3]);co.fillRect(redrawCoords[k][0],redrawCoords[k][1],redrawCoords[k][2],redrawCoords[k][3]);co.stroke();co.fill();}\nredrawCoords=[];}}else if(this.data[i]&&typeof(this.data[i])=='object'&&prop['chart.grouping']=='grouped'){var redrawCoords=[];co.lineWidth=prop['chart.linewidth'];for(j=0;j<this.data[i].length;++j){co.strokeStyle=strokeStyle;co.fillStyle=colors[j];if(prop['chart.colors.sequential']&&colors[sequentialColorIndex]){co.fillStyle=colors[sequentialColorIndex++];}else if(prop['chart.colors.sequential']){co.fillStyle=colors[sequentialColorIndex-1];}\nvar individualBarWidth=(width-(2*hmargin))/this.data[i].length;var height=((this.data[i][j]+(this.data[i][j]<0?this.scale2.min:(-1*this.scale2.min)))/(this.scale2.max-this.scale2.min))*(ca.height-this.gutterTop-this.gutterBottom);var groupedMargin=prop['chart.hmargin.grouped'];var startX=x+hmargin+(j*individualBarWidth);if(individualBarWidth<0){alert('[RGRAPH] Warning: you have a negative bar width. This may be caused by the chart.hmargin being too high or the width of the canvas not being sufficient.');}\nif(xaxispos=='center'){height/=2;}\nif(xaxispos=='top'){var startY=this.gutterTop;var height=Math.abs(height);}else if(xaxispos=='center'){var startY=this.gutterTop+(this.grapharea/2)-height;}else{var startY=this.getYCoord(0);var height=ma.abs(ma.abs(this.getYCoord(this.data[i][j]))-this.getYCoord(0));if(this.data[i][j]>=0){startY-=height;}}\nco.strokeRect(startX+groupedMargin,startY,individualBarWidth-(2*groupedMargin),height);co.fillRect(startX+groupedMargin,startY,individualBarWidth-(2*groupedMargin),height);y+=height;if(variant=='3d'){var prevFillStyle=co.fillStyle;var prevStrokeStyle=co.strokeStyle;var hmarginGrouped=prop['chart.hmargin.grouped'];if(this.data[i][j]>=0){co.beginPath();co.moveTo(startX+hmarginGrouped,startY);co.lineTo(startX+hmarginGrouped+prop['chart.variant.threed.offsetx'],startY-prop['chart.variant.threed.offsety']);co.lineTo(startX+prop['chart.variant.threed.offsetx']+individualBarWidth-hmarginGrouped,startY-prop['chart.variant.threed.offsety']);co.lineTo(startX+individualBarWidth-hmarginGrouped,startY);co.closePath();co.fill();co.stroke();}\nco.beginPath();co.moveTo(startX+individualBarWidth-hmarginGrouped-1,startY);co.lineTo(startX+individualBarWidth-hmarginGrouped+prop['chart.variant.threed.offsetx'],this.data[i][j]<0?(this.getYCoord(0)+ma.abs(height)-prop['chart.variant.threed.offsety']):this.getYCoord(0)-height-prop['chart.variant.threed.offsety']);co.lineTo(startX+individualBarWidth-hmarginGrouped+prop['chart.variant.threed.offsetx'],this.data[i][j]<0&&(startY+height-prop['chart.variant.threed.offsety'])<(this.gutterTop+this.halfgrapharea)?(this.gutterTop+this.halfgrapharea):(startY+height-prop['chart.variant.threed.offsety']));co.lineTo(startX+individualBarWidth-hmarginGrouped-1,startY+height);co.closePath();co.fill();co.stroke();if(this.data[i][j]>=0){co.fillStyle='rgba(255,255,255,0.5)';co.beginPath();co.moveTo(startX+hmarginGrouped,startY);co.lineTo(startX+hmarginGrouped+prop['chart.variant.threed.offsetx'],startY-prop['chart.variant.threed.offsety']);co.lineTo(startX+prop['chart.variant.threed.offsetx']+individualBarWidth-hmarginGrouped,startY-prop['chart.variant.threed.offsety']);co.lineTo(startX+individualBarWidth-hmarginGrouped,startY);co.closePath();co.fill();co.stroke();}\nco.fillStyle='rgba(0,0,0,0.4)';co.beginPath();co.moveTo(startX+individualBarWidth-hmarginGrouped,startY);co.lineTo(startX+individualBarWidth+prop['chart.variant.threed.offsetx']-hmarginGrouped,this.data[i][j]<0?(this.getYCoord(0)+ma.abs(height)-prop['chart.variant.threed.offsety']):this.getYCoord(0)-height-prop['chart.variant.threed.offsety']);co.lineTo(startX+individualBarWidth+prop['chart.variant.threed.offsetx']-hmarginGrouped,this.data[i][j]<0&&(startY+height-5)<(this.gutterTop+this.halfgrapharea)?(this.gutterTop+this.halfgrapharea):(startY+height-prop['chart.variant.threed.offsety']));co.lineTo(startX+individualBarWidth-hmarginGrouped,startY+height);co.closePath();co.fill();co.stroke();co.strokeStyle=prevStrokeStyle;co.fillStyle=prevFillStyle;}\nif(height<0){height=Math.abs(height);startY=startY-height;}\nthis.coords.push([startX+groupedMargin,startY,individualBarWidth-(2*groupedMargin),height]);if(typeof this.coords2[i]=='undefined'){this.coords2[i]=[];}\nthis.coords2[i].push([startX+groupedMargin,startY,individualBarWidth-(2*groupedMargin),height]);if(prop['chart.shadow']){redrawCoords.push([startX+groupedMargin,startY,individualBarWidth-(2*groupedMargin),height,co.fillStyle]);}}\nif(redrawCoords.length){RGraph.NoShadow(this);co.lineWidth=prop['chart.linewidth'];co.beginPath();for(var j=0;j<redrawCoords.length;++j){co.fillStyle=redrawCoords[j][4];co.strokeStyle=prop['chart.strokecolor'];co.fillRect(redrawCoords[j][0],redrawCoords[j][1],redrawCoords[j][2],redrawCoords[j][3]);co.strokeRect(redrawCoords[j][0],redrawCoords[j][1],redrawCoords[j][2],redrawCoords[j][3]);}\nco.fill();co.stroke();redrawCoords=[];}}else{this.coords.push([]);}\nco.closePath();}\nif(prop['chart.variant']==='3d'&&prop['chart.yaxispos']==='right'){RG.draw3DYAxis(this);}\nRGraph.noShadow(this);};this.drawLabels=this.DrawLabels=function()\n{var context=co;var text_angle=prop['chart.text.angle'],text_size=prop['chart.text.size'],labels=prop['chart.labels']\nif(prop['chart.ylabels']){if(prop['chart.xaxispos']=='top')this.Drawlabels_top();if(prop['chart.xaxispos']=='center')this.Drawlabels_center();if(prop['chart.xaxispos']=='bottom')this.Drawlabels_bottom();}\nif(typeof(labels)=='object'&&labels){var yOffset=Number(prop['chart.labels.offsety']),xOffset=Number(prop['chart.labels.offsetx']),bold=prop['chart.labels.bold']\nif(prop['chart.text.angle']!=0){var valign='center';var halign='right';var angle=0-prop['chart.text.angle'];}else{var valign='top';var halign='center';var angle=0;}\nco.fillStyle=prop['chart.labels.color']||prop['chart.text.color'];var barWidth=(ca.width-this.gutterRight-this.gutterLeft)/labels.length;xTickGap=(ca.width-this.gutterRight-this.gutterLeft)/labels.length\nvar i=0;var font=prop['chart.text.font'];for(x=this.gutterLeft+(xTickGap/2);x<=ca.width-this.gutterRight;x+=xTickGap){RG.text2(this,{'font':font,'size':text_size,'x':x+xOffset,'y':prop['chart.xaxispos']=='top'?this.gutterTop+yOffset-5:(ca.height-this.gutterBottom)+yOffset+3,'bold':bold,'text':String(labels[i++]),'valign':prop['chart.xaxispos']=='top'?'bottom':valign,'halign':halign,'tag':'label','marker':false,'angle':angle,'tag':'labels'});}}\nthis.drawAboveLabels();};this.drawlabels_top=this.Drawlabels_top=function()\n{var ca=this.canvas;var co=this.context;var prop=this.properties;co.beginPath();co.fillStyle=prop['chart.text.color'];co.strokeStyle='black';if(prop['chart.xaxispos']=='top'){var context=co;var text_size=prop['chart.text.size'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var align=prop['chart.yaxispos']=='left'?'right':'left';var font=prop['chart.text.font'];var numYLabels=prop['chart.ylabels.count'];var ymin=prop['chart.ymin'];var offsetx=prop['chart.ylabels.offsetx'];var offsety=prop['chart.ylabels.offsety'];if(prop['chart.ylabels.inside']==true){var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft+5:ca.width-this.gutterRight-5;var align=prop['chart.yaxispos']=='left'?'left':'right';var boxed=true;}else{var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var boxed=false;}\nif(typeof(prop['chart.ylabels.specific'])=='object'&&prop['chart.ylabels.specific']){var labels=RGraph.array_reverse(prop['chart.ylabels.specific']);var grapharea=ca.height-this.gutterTop-this.gutterBottom;for(var i=0;i<labels.length;++i){var y=this.gutterTop+(grapharea*(i/labels.length))+(grapharea/labels.length);RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':String(labels[i]),'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nreturn;}\nvar labels=this.scale2.labels;for(var i=0;i<labels.length;++i){RGraph.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+((this.grapharea/labels.length)*(i+1))+offsety,'text':'-'+labels[i],'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nif(prop['chart.ymin']!=0||prop['chart.noxaxis']||prop['chart.scale.zerostart']){RGraph.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+offsety,'text':(this.scale2.min!=0?'-':'')+RGraph.numberFormat(this,(this.scale2.min.toFixed((this.scale2.min===0?0:prop['chart.scale.decimals']))),units_pre,units_post),'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}}\nco.fill();};this.drawlabels_center=this.Drawlabels_center=function()\n{var ca=this.canvas;var co=this.context;var prop=this.properties;var font=prop['chart.text.font'];var numYLabels=prop['chart.ylabels.count'];co.fillStyle=prop['chart.text.color'];if(prop['chart.xaxispos']=='center'){var text_size=prop['chart.text.size'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var context=co;var align='';var xpos=0;var boxed=false;var ymin=prop['chart.ymin'];var offsetx=prop['chart.ylabels.offsetx'];var offsety=prop['chart.ylabels.offsety'];co.fillStyle=prop['chart.text.color'];co.strokeStyle='black';if(prop['chart.ylabels.inside']==true){var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft+5:ca.width-this.gutterRight-5;var align=prop['chart.yaxispos']=='left'?'left':'right';var boxed=true;}else{var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='left'?'right':'left';var boxed=false;}\nif(typeof(prop['chart.ylabels.specific'])=='object'&&prop['chart.ylabels.specific']){var labels=prop['chart.ylabels.specific'];var grapharea=ca.height-this.gutterTop-this.gutterBottom;for(var i=0;i<labels.length;++i){var y=this.gutterTop+((grapharea/2)/(labels.length-1))*i;RGraph.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':String(labels[i]),'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nfor(var i=labels.length-1;i>=1;--i){var y=this.gutterTop+(grapharea*(i/((labels.length-1)*2)))+(grapharea/2);RG.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':String(labels[labels.length-i-1]),'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nreturn;}\nfor(var i=0;i<this.scale2.labels.length;++i){var y=this.gutterTop+this.halfgrapharea-((this.halfgrapharea/numYLabels)*(i+1));var text=this.scale2.labels[i];RG.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':text,'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nfor(var i=(this.scale2.labels.length-1);i>=0;--i){var y=this.gutterTop+((this.halfgrapharea/numYLabels)*(i+1))+this.halfgrapharea;var text=this.scale2.labels[i];RG.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':'-'+text,'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nif(this.scale2.min!=0||prop['chart.scale.zerostart']){RG.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+this.halfgrapharea+offsety,'text':RG.number_format(this,(this.scale2.min.toFixed((this.scale2.min===0?0:prop['chart.scale.decimals']))),units_pre,units_post),'valign':'center','valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}}};this.drawlabels_bottom=this.Drawlabels_bottom=function()\n{var text_size=prop['chart.text.size'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],context=this.context,align=prop['chart.yaxispos']=='left'?'right':'left',font=prop['chart.text.font'],numYLabels=prop['chart.ylabels.count'],ymin=prop['chart.ymin'],offsetx=prop['chart.ylabels.offsetx'],offsety=prop['chart.ylabels.offsety']\nco.beginPath();co.fillStyle=prop['chart.text.color'];co.strokeStyle='black';if(prop['chart.ylabels.inside']==true){var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft+5:ca.width-this.gutterRight-5;var align=prop['chart.yaxispos']=='left'?'left':'right';var boxed=true;}else{var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var boxed=false;}\nif(prop['chart.ylabels.specific']&&typeof(prop['chart.ylabels.specific'])=='object'){var labels=prop['chart.ylabels.specific'];var grapharea=ca.height-this.gutterTop-this.gutterBottom;for(var i=0;i<labels.length;++i){var y=this.gutterTop+(grapharea*(i/(labels.length-1)));RGraph.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':y+offsety,'text':labels[i],'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nreturn;}\nvar gutterTop=this.gutterTop;var halfTextHeight=this.halfTextHeight;var scale=this.scale;for(var i=0;i<numYLabels;++i){var text=this.scale2.labels[i];RGraph.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+this.grapharea-((this.grapharea/numYLabels)*(i+1))+offsety,'text':text,'valign':'center','halign':align,'bordered':boxed,'tag':'scale'});}\nif(prop['chart.ymin']!=0||prop['chart.noxaxis']||prop['chart.scale.zerostart']){RG.text2(this,{font:font,size:text_size,x:xpos+offsetx,y:ca.height-this.gutterBottom+offsety,text:RG.numberFormat(this,(this.scale2.min.toFixed((this.scale2.min===0?0:prop['chart.scale.decimals']))),units_pre,units_post),valign:'center',halign:align,bordered:boxed,tag:'scale'});}\nco.fill();};this.drawIEShadow=this.DrawIEShadow=function(coords)\n{var co=this.context;var ca=this.canvas;var prop=this.properties;var prevFillStyle=co.fillStyle;var offsetx=prop['chart.shadow.offsetx'];var offsety=prop['chart.shadow.offsety'];co.lineWidth=prop['chart.linewidth'];co.fillStyle=prop['chart.shadow.color'];co.beginPath();co.fillRect(coords[0]+offsetx,coords[1]+offsety,coords[2],coords[3]);co.fill();co.fillStyle=prevFillStyle;};this.getShape=this.getBar=function(e)\n{var obj=arguments[1]?arguments[1]:this;var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1],canvas=obj.canvas,context=obj.context,coords=obj.coords\nfor(var i=0,len=coords.length;i<len;i+=1){if(obj.coords[i].length==0){continue;}\nvar left=coords[i][0],top=coords[i][1],width=coords[i][2],height=coords[i][3],prop=obj.properties\nif(prop['chart.tooltips.hotspot.xonly']){pa2(co,'b r % % % %',left,this.gutterTop,width,ca.height-this.gutterBottom);}else{pa2(co,'b r % % % %',left,top,width,height);}\nif(co.isPointInPath(mouseX,mouseY)){if(prop['chart.tooltips']){var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],i):prop['chart.tooltips'][i];}\nvar dataset=0,idx=i\nwhile(idx>=(typeof obj.data[dataset]==='object'&&obj.data[dataset]?obj.data[dataset].length:1)){if(typeof obj.data[dataset]==='number'){idx-=1;}else if(obj.data[dataset]){idx-=obj.data[dataset].length;}else{idx-=1;}\ndataset++;}\nif(typeof(obj.data[dataset])=='number'){idx=null;}\nreturn{0:obj,1:left,2:top,3:width,4:height,5:i,object:obj,x:left,y:top,width:width,height:height,index:i,tooltip:tooltip,index_adjusted:idx,dataset:dataset};}}\nreturn null;};this.getShapeByX=function(e)\n{var canvas=e.target;var mouseCoords=RGraph.getMouseXY(e);var obj=arguments[1]?arguments[1]:this;for(var i=0,len=obj.coords.length;i<len;i++){if(obj.coords[i].length==0){continue;}\nvar mouseX=mouseCoords[0];var mouseY=mouseCoords[1];var left=obj.coords[i][0];var top=obj.coords[i][1];var width=obj.coords[i][2];var height=obj.coords[i][3];var prop=obj.properties;if(mouseX>=left&&mouseX<=(left+width)){if(prop['chart.tooltips']){var tooltip=RGraph.parseTooltipText?RGraph.parseTooltipText(prop['chart.tooltips'],i):prop['chart.tooltips'][i];}\nreturn{0:obj,1:left,2:top,3:width,4:height,5:i,'object':obj,'x':left,'y':top,'width':width,'height':height,'index':i,'tooltip':tooltip};}}\nreturn null;};this.getValue=function(arg)\n{var co=this.context;var ca=this.canvas;var prop=this.properties;if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}\nif(mouseY<prop['chart.gutter.top']||mouseY>(ca.height-prop['chart.gutter.bottom'])||mouseX<prop['chart.gutter.left']||mouseX>(ca.width-prop['chart.gutter.right'])){return null;}\nif(prop['chart.xaxispos']=='center'){var value=(((this.grapharea/2)-(mouseY-prop['chart.gutter.top']))/this.grapharea)*(this.scale2.max-this.scale2.min)\nvalue*=2;if(value>=0){value+=this.scale2.min;}else{value-=this.scale2.min;}}else if(prop['chart.xaxispos']=='top'){var value=((this.grapharea-(mouseY-prop['chart.gutter.top']))/this.grapharea)*(this.scale2.max-this.scale2.min)\nvalue=this.scale2.max-value;value=ma.abs(value)* -1;}else{var value=((this.grapharea-(mouseY-prop['chart.gutter.top']))/this.grapharea)*(this.scale2.max-this.scale2.min)\nvalue+=this.scale2.min;}\nreturn value;};this.getYCoord=function(value)\n{if(value>this.scale2.max){return null;}\nvar co=this.context,ca=this.canvas,prop=this.properties;var y,xaxispos=prop['chart.xaxispos'];if(xaxispos=='top'){if(value<0){value=ma.abs(value);}\ny=((value-this.scale2.min)/(this.scale2.max-this.scale2.min))*this.grapharea;y=y+this.gutterTop}else if(xaxispos=='center'){y=((value-this.scale2.min)/(this.scale2.max-this.scale2.min))*(this.grapharea/2);y=(this.grapharea/2)-y;y+=this.gutterTop;}else{if(value<this.scale2.min){value=this.scale2.min;}\ny=((value-this.scale2.min)/(this.scale2.max-this.scale2.min));y*=(ca.height-this.gutterTop-this.gutterBottom);y=ca.height-this.gutterBottom-y;}\nreturn y;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseXY[1]-=adjustment;}\nif(mouseXY[0]>=prop['chart.gutter.left']&&mouseXY[0]<=(ca.width-prop['chart.gutter.right'])&&mouseXY[1]>=prop['chart.gutter.top']&&mouseXY[1]<=(ca.height-prop['chart.gutter.bottom'])){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var value=Number(this.getValue(e));var shape=RG.Registry.Get('chart.adjusting.shape')\nif(shape){RG.Registry.Set('chart.adjusting.shape',shape);if(this.stackedOrGrouped&&prop['chart.grouping']=='grouped'){var indexes=RG.sequentialIndexToGrouped(shape['index'],this.data);if(typeof this.data[indexes[0]]=='number'){this.data[indexes[0]]=Number(value);}else if(!RG.isNull(this.data[indexes[0]])){this.data[indexes[0]][indexes[1]]=Number(value);}}else if(typeof this.data[shape['index']]=='number'){this.data[shape['index']]=Number(value);}\nRG.redrawCanvas(e.target);RG.fireCustomEvent(this,'onadjust');}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RGraph.array_clone(prop['chart.colors']);this.original_colors['chart.key.colors']=RGraph.array_clone(prop['chart.key.colors']);this.original_colors['chart.crosshairs.color']=prop['chart.crosshairs.color'];this.original_colors['chart.highlight.stroke']=prop['chart.highlight.stroke'];this.original_colors['chart.highlight.fill']=prop['chart.highlight.fill'];this.original_colors['chart.text.color']=prop['chart.text.color'];this.original_colors['chart.background.barcolor1']=prop['chart.background.barcolor1'];this.original_colors['chart.background.barcolor2']=prop['chart.background.barcolor2'];this.original_colors['chart.background.grid.color']=prop['chart.background.grid.color'];this.original_colors['chart.background.color']=prop['chart.background.color'];this.original_colors['chart.strokecolor']=prop['chart.strokecolor'];this.original_colors['chart.axis.color']=prop['chart.axis.color'];}\nvar colors=prop['chart.colors'];if(colors){for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}\nvar colors=prop['chart.key.colors'];if(colors){for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}\nprop['chart.crosshairs.color']=this.parseSingleColorForGradient(prop['chart.crosshairs.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);prop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.strokecolor']=this.parseSingleColorForGradient(prop['chart.strokecolor']);prop['chart.axis.color']=this.parseSingleColorForGradient(prop['chart.axis.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RGraph.trim(parts[j]));}}\nreturn grad?grad:color;};this.drawBevel=this.DrawBevel=function()\n{var coords=this.coords;var coords2=this.coords2;var prop=this.properties;var co=this.context;var ca=this.canvas;if(prop['chart.grouping']=='stacked'){for(var i=0;i<coords2.length;++i){if(coords2[i]&&coords2[i][0]&&coords2[i][0][0]){var x=coords2[i][0][0];var y=coords2[i][0][1];var w=coords2[i][0][2];var arr=[];for(var j=0;j<coords2[i].length;++j){arr.push(coords2[i][j][3]);}\nvar h=RGraph.array_sum(arr);co.save();co.strokeStyle='black';co.beginPath();co.rect(x,y,w,h);co.clip();co.shadowColor='black';co.shadowOffsetX=0;co.shadowOffsetY=0;co.shadowBlur=20;co.beginPath();co.rect(x-3,y-3,w+6,h+100);co.lineWidth=5;co.stroke();co.restore();}}}else{for(var i=0;i<coords.length;++i){if(coords[i]){var x=coords[i][0];var y=coords[i][1];var w=coords[i][2];var h=coords[i][3];var xaxispos=prop['chart.xaxispos'];var xaxis_ycoord=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;co.save();co.strokeStyle='black';co.beginPath();co.rect(x,y,w,h);co.clip();co.shadowColor='black';co.shadowOffsetX=0;co.shadowOffsetY=0;co.shadowBlur=20;if(xaxispos=='top'||(xaxispos=='center'&&(y+h)>xaxis_ycoord)){y=y-100;h=h+100;}else{y=y;h=h+100;}\nco.beginPath();co.rect(x-3,y-3,w+6,h+6);co.lineWidth=5;co.stroke();co.restore();}}}};this.interactiveKeyHighlight=function(index)\n{this.coords2.forEach(function(value,idx,arr)\n{if(typeof value[index]=='object'&&value[index]){var x=value[index][0]\nvar y=value[index][1]\nvar w=value[index][2]\nvar h=value[index][3]\nco.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.lineWidth=2;co.strokeRect(x,y,w,h);co.fillRect(x,y,w,h);}});};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.drawAboveLabels=function()\n{var labels=prop['chart.labels.above'],specific=prop['chart.labels.above.specific'],color=prop['chart.labels.above.color'],background=prop['chart.labels.above.background'],decimals=prop['chart.labels.above.decimals'],size=prop['chart.labels.above.size'],angle=-1*prop['chart.labels.above.angle'],unitsPre=prop['chart.labels.above.units.pre'],unitsPost=prop['chart.labels.above.units.post'],coords=this.coords,coords2=this.coords2,data=this.data,ldata=RG.arrayLinearize(this.data),offset=prop['chart.labels.above.offset'],text_font=prop['chart.text.font'],text_size=prop['chart.text.size'],grouping=prop['chart.grouping']\nRG.noShadow(this);co.fillStyle=typeof color==='string'?color:prop['chart.text.color'];if(labels&&grouping==='grouped'){for(var i=0,len=data.length,sequentialIndex=0;i<len;i+=1){if(typeof data[i]==='number'&&data[i]>=0){var angle=angle;var halign=(angle?'left':'center');var valign=angle!==0?'center':'bottom';RG.text2(this,{'font':text_font,'size':typeof size==='number'?size:text_size-3,'x':coords2[i][0][0]+(coords2[i][0][2]/2),'y':coords2[i][0][1]-offset,'text':specific?(specific[sequentialIndex]||''):RG.numberFormat(this,Number(typeof data[i]==='object'?data[i][0]:data[i]).toFixed(decimals),unitsPre,unitsPost),'halign':halign,'valign':valign,'angle':angle,'marker':false,'bounding':true,'bounding.fill':background,'bounding.stroke':'rgba(0,0,0,0)','tag':'labels.above'});sequentialIndex++;}else if(typeof data[i]==='number'&&data[i]<0){var angle=angle;var halign=angle?'right':'center';var valign=angle!==0?'center':'top';RG.text2(this,{'font':text_font,'size':typeof size==='number'?size:text_size-3,'x':coords2[i][0][0]+(coords2[i][0][2]/2),'y':coords2[i][0][1]+coords2[i][0][3]+offset,'text':specific?(specific[sequentialIndex]||''):RG.numberFormat(this,Number(typeof data[i]==='object'?data[i][0]:data[i]).toFixed(decimals),unitsPre,unitsPost),'halign':halign,'valign':valign,'angle':angle,'bounding':true,'bounding.fill':background,'bounding.stroke':'rgba(0,0,0,0)','marker':false,'tag':'labels.above'});sequentialIndex++;}else if(typeof data[i]==='object'){for(var j=0,len2=data[i].length;j<len2;j+=1){var angle=angle;var halign=data[i][j]<0?'right':'left';halign=angle===0?'center':halign;var valign=data[i][j]<0?'top':'bottom';valign=angle!=0?'center':valign;RG.text2(this,{'font':text_font,'size':typeof size==='number'?size:text_size-3,'x':coords2[i][j][0]+(coords2[i][j][2]/2),'y':coords2[i][j][1]+(data[i][j]<0?coords2[i][j][3]+offset:-offset),'text':specific?(specific[sequentialIndex]||''):RG.numberFormat(this,Number(data[i][j]).toFixed(decimals),unitsPre,unitsPost),'halign':halign,'valign':valign,'angle':angle,'bounding':true,'bounding.fill':background,'bounding.stroke':'rgba(0,0,0,0)','marker':false,'tag':'labels.above'});sequentialIndex++;}}}}else if(labels&&grouping==='stacked'){for(var i=0,len=data.length,sequentialIndex=0;i<len;i+=1){if(typeof data[i]==='object'){var angle=angle;var halign=angle!=0?'left':'center';var valign=angle!=0?'center':'bottom';RG.text2(this,{'font':text_font,'size':typeof size==='number'?size:text_size-3,'x':coords2[i][0][0]+(coords2[i][0][2]/2),'y':coords2[i][0][1]+(data[i][0]<0?coords2[i][0][3]:0)-offset,'text':specific?(specific[sequentialIndex]||''):RG.numberFormat(this,Number(RG.arraySum(data[i])).toFixed(decimals),unitsPre,unitsPost),'halign':halign,'valign':valign,'angle':angle,'bounding':true,'bounding.fill':background,'bounding.stroke':'rgba(0,0,0,0)','marker':false,'tag':'labels.above'});sequentialIndex+=data[i].length;}else{var angle=angle;var halign=angle!=0?'left':'center';var valign=angle!=0?'center':'bottom';RG.text2(this,{'font':text_font,'size':typeof size==='number'?size:text_size-3,'x':coords2[i][0][0]+(coords2[i][0][2]/2),'y':coords2[i][0][1]+(data[i][0]<0?coords2[i][0][3]:0)-offset,'text':specific?(specific[sequentialIndex]||''):RG.numberFormat(this,Number(data[i]).toFixed(decimals),unitsPre,unitsPost),'halign':halign,'valign':valign,'angle':angle,'bounding':true,'bounding.fill':background,'bounding.stroke':'rgba(0,0,0,0)','marker':false,'tag':'labels.above'});sequentialIndex++;}}}};this.firstDrawFunc=function()\n{};this.wave=function()\n{var obj=this,opt=arguments[0]||{},labelsAbove=this.get('labelsAbove');opt.frames=opt.frames||60;opt.startFrames=[];opt.counters=[];var framesperbar=opt.frames/3,frame=-1,callback=arguments[1]||function(){},original=RG.arrayClone(this.original_data);this.set('labelsAbove',false);for(var i=0,len=obj.data.length;i<len;i+=1){opt.startFrames[i]=((opt.frames/2)/(obj.data.length-1))*i;if(typeof obj.data[i]==='object'&&obj.data[i]){opt.counters[i]=[];for(var j=0;j<obj.data[i].length;j++){opt.counters[i][j]=0;}}else{opt.counters[i]=0;}}\nobj.draw();obj.Set('ymax',obj.scale2.max);RG.clear(obj.canvas);function iterator()\n{++frame;for(var i=0,len=obj.data.length;i<len;i+=1){if(frame>opt.startFrames[i]){if(typeof obj.data[i]==='number'){obj.data[i]=ma.min(ma.abs(original[i]),ma.abs(original[i]*((opt.counters[i]++)/framesperbar)));if(original[i]<0){obj.data[i]*=-1;}}else if(!RG.isNull(obj.data[i])){for(var j=0,len2=obj.data[i].length;j<len2;j+=1){obj.data[i][j]=ma.min(ma.abs(original[i][j]),ma.abs(original[i][j]*((opt.counters[i][j]++)/framesperbar)));if(original[i][j]<0){obj.data[i][j]*=-1;}}}}else{obj.data[i]=typeof obj.data[i]==='object'&&obj.data[i]?RG.arrayPad([],obj.data[i].length,0):(RG.isNull(obj.data[i])?null:0);}}\nif(frame>=opt.frames){if(labelsAbove){obj.set('labelsAbove',true);RG.redraw();}\ncallback(obj);}else{RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iterator);}}\niterator();return this;};this.colorWave=function()\n{var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||60;opt.startFrames=[];opt.counters=[],colors=obj.properties['chart.colors'];if(colors.length<=obj.data.length){obj.set('chart.colors.sequential',true);colors=RG.arrayPad(colors,obj.data.length,colors[colors.length-1]);}\nvar framesperbar=opt.frames/2,frame=-1,callback=arguments[1]||function(){},originalColors=RG.arrayClone(obj.properties['chart.colors']);for(var i=0,len=originalColors.length;i<len;i+=1){opt.startFrames[i]=((opt.frames/2)/(originalColors.length-1))*i;opt.counters[i]=0;}\nfunction iterator()\n{++frame;for(var i=0,len=colors.length;i<len;i+=1){if(frame>opt.startFrames[i]&&colors[i].match(/^rgba?\\(([0-9 ]+),([0-9 ]+),([0-9 ]+)(,([ 0-9.]+)?)\\)/)){colors[i]='rgba({1},{2},{3},{4})'.format(RegExp.$1,RegExp.$2,RegExp.$3,(frame-opt.startFrames[i])/framesperbar);}else{colors[i]=colors[i].replace(/,[0-9. ]+\\)/,',0)');}}\nif(frame>=opt.frames){callback(obj);}else{RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iterator);}}\niterator();return this;};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){},obj=this,labelsAbove=this.get('labelsAbove')\nif(RG.isArray(opt.data)){var ymax=0;for(var i=0;i<opt.data.length;++i){if(typeof opt.data[i]==='object'){for(var j=0;j<opt.data[i].length;++j){if(typeof opt.data[i][j]==='string'&&opt.data[i][j].match(/(\\+|\\-)([0-9]+)/)){if(RegExp.$1==='+'){opt.data[i][j]=this.original_data[i][j]+parseInt(RegExp.$2);}else{opt.data[i][j]=this.original_data[i][j]-parseInt(RegExp.$2);}}\nymax=ma.max(ymax,opt.data[i][j]);}}else if(typeof opt.data[i]==='string'&&opt.data[i].match(/(\\+|\\-)([0-9]+)/)){if(RegExp.$1==='+'){opt.data[i]=this.original_data[i]+parseInt(RegExp.$2);}else{opt.data[i]=this.original_data[i]-parseInt(RegExp.$2);}\nymax=ma.max(ymax,opt.data[i]);}else{ymax=ma.max(ymax,opt.data[i]);}}\nvar scale=RG.getScale2(this,{'max':ymax});this.Set('chart.ymax',scale.max);}\nthis.set('labelsAbove',false);if(prop['chart.ymax']==null){var ymax=0;for(var i=0;i<obj.data.length;++i){if(RG.isArray(this.data[i])&&prop['chart.grouping']==='stacked'){ymax=ma.max(ymax,ma.abs(RG.arraySum(this.data[i])));}else if(RG.isArray(this.data[i])&&prop['chart.grouping']==='grouped'){for(var j=0,group=[];j<this.data[i].length;j++){group.push(ma.abs(this.data[i][j]));}\nymax=ma.max(ymax,ma.abs(RG.arrayMax(group)));}else{ymax=ma.max(ymax,ma.abs(this.data[i]));}}\nvar scale=RG.getScale2(this,{'max':ymax});this.Set('chart.ymax',scale.max);}\nif(typeof opt.ymax==='number'){obj.set('ymax',opt.ymax);}\nvar iterator=function()\n{var easingMultiplier=RG.Effects.getEasingMultiplier(frames,frame);for(var j=0,len=obj.original_data.length;j<len;++j){if(typeof obj.data[j]==='object'&&!RG.isNull(obj.data[j])){for(var k=0,len2=obj.data[j].length;k<len2;++k){if(obj.firstDraw||!opt.data){obj.data[j][k]=easingMultiplier*obj.original_data[j][k];}else if(opt.data&&opt.data.length===obj.original_data.length){var diff=opt.data[j][k]-obj.original_data[j][k];obj.data[j][k]=(easingMultiplier*diff)+obj.original_data[j][k];}}}else{if(obj.firstDraw||!opt.data){obj.data[j]=easingMultiplier*obj.original_data[j];}else if(opt.data&&opt.data.length===obj.original_data.length){var diff=opt.data[j]-obj.original_data[j];obj.data[j]=(easingMultiplier*diff)+obj.original_data[j];}}}\nRG.redrawCanvas(obj.canvas);if(frame<frames){frame+=1;RG.Effects.updateCanvas(iterator);}else{if(RG.isArray(opt.data)){var linear_data=RG.arrayLinearize(data);for(var i=0;i<linear_data.length;++i){if(!obj['$'+i]){obj['$'+i]={};}}}\nobj.data=data;obj.original_data=RG.arrayClone(data);if(labelsAbove){obj.set('labelsAbove',true);RG.redraw();}\ncallback(obj);}};iterator();return this;};this.drawErrorbars=function()\n{var coords=this.coords,color=prop['chart.errorbars.color']||'black',default_halfwidth=ma.min(prop['chart.errorbars.capped.width'],coords[0][2])/2,x=0,errorbars=prop['chart.errorbars'],length=0;if(!prop['chart.errorbars.capped']){prop['chart.errorbars.capped.width']=0;halfwidth=0;}\nco.lineWidth=prop['chart.errorbars.linewidth'];for(var i=0;i<coords.length;++i){color=prop['chart.errorbars.color']||'black';if(errorbars[i]&&typeof errorbars[i][3]==='number'){co.lineWidth=errorbars[i][3];}\nvar halfwidth=(errorbars[i]&&typeof errorbars[i][4]==='number')?errorbars[i][4]/2:default_halfwidth;if(!prop['chart.errorbars.capped']){halfwidth=0;}\nif(typeof errorbars[i]==='number'){length=ma.abs(this.getYCoord(errorbars[i])-this.getYCoord(0));if(length){pa2(co,'b m % % l % % l % % l % % s %',coords[i][0]+(coords[i][2]/2),coords[i][1],coords[i][0]+(coords[i][2]/2),coords[i][1]-length,coords[i][0]+(coords[i][2]/2)-halfwidth,ma.round(coords[i][1]-length),coords[i][0]+(coords[i][2]/2)+halfwidth,ma.round(coords[i][1]-length),color);}}else if(typeof errorbars[i]==='object'&&!RG.isNull(errorbars[i])){var positiveLength=ma.abs(this.getYCoord(errorbars[i][0])-this.getYCoord(0));if(typeof errorbars[i][1]==='string'){color=errorbars[i][1];}else if(typeof errorbars[i][2]==='string'){color=errorbars[i][2];}\nhalfwidth=typeof errorbars[i][4]==='number'?errorbars[i][4]/2:default_halfwidth;if(!prop['chart.errorbars.capped']){halfwidth=0;}\nif(!RG.isNull(errorbars[i][0])){pa2(co,'b m % % l % % l % % l % % s %',coords[i][0]+(coords[i][2]/2),coords[i][1],coords[i][0]+(coords[i][2]/2),coords[i][1]-positiveLength,coords[i][0]+(coords[i][2]/2)-halfwidth,ma.round(coords[i][1]-positiveLength),coords[i][0]+(coords[i][2]/2)+halfwidth,ma.round(coords[i][1]-positiveLength),color);}\nif(typeof errorbars[i][1]==='number'){var negativeLength=ma.abs(this.getYCoord(errorbars[i][1])-this.getYCoord(0));pa2(co,'b m % % l % % l % % l % % s %',coords[i][0]+(coords[i][2]/2),coords[i][1],coords[i][0]+(coords[i][2]/2),coords[i][1]+negativeLength,coords[i][0]+(coords[i][2]/2)-halfwidth,ma.round(coords[i][1]+negativeLength),coords[i][0]+(coords[i][2]/2)+halfwidth,ma.round(coords[i][1]+negativeLength),color);}}\nif(errorbars[i]&&typeof errorbars[i][3]==='number'){co.lineWidth=prop['chart.errorbars.linewidth'];}}};this.isAdjustable=function(shape)\n{if(RG.isNull(prop['chart.adjustable.only'])||!RG.isArray(prop['chart.adjustable.only'])){return true;}\nif(RG.isArray(prop['chart.adjustable.only'])&&prop['chart.adjustable.only'][shape.index]){return true;}\nreturn false;};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};RGraph.CombinedChart=function()\n{this.objects=[];var objects=[];if(RGraph.isArray(arguments[0])){objects=arguments[0];}else{for(var i=0;i<arguments.length;i+=1){objects[i]=arguments[i];}}\nfor(var i=0;i<objects.length;++i){this.objects[i]=objects[i];this.objects[i].set({gutterLeft:this.objects[0].get('gutter.left'),gutterRight:this.objects[0].get('gutter.right'),gutterTop:this.objects[0].get('gutter.top'),gutterBottom:this.objects[0].get('gutter.bottom')});if(this.objects[i].type=='line'){var obj=this.objects[i];obj.set('hmargin',((this.objects[0].canvas.width-this.objects[0].Get('chart.gutter.right')-this.objects[0].Get('chart.gutter.left'))/this.objects[0].data.length)/2);obj.set('noaxes',true);obj.set('backgroundGrid',false);obj.set('ylabels',false);}\nif(this.objects[i].get('chart.resizable')){var resizable_object=obj;}}\nif(resizable_object){function myOnresizebeforedraw(obj)\n{var gutterLeft=obj.get('gutterLeft');var gutterRight=obj.get('gutterRight');obj.set('hmargin',(obj.canvas.width-gutterLeft-gutterRight)/(obj.original_data[0].length*2));}\nRGraph.AddCustomEventListener(resizable_object,'onresizebeforedraw',myOnresizebeforedraw);}};RGraph.CombinedChart.prototype.add=RGraph.CombinedChart.prototype.Add=function(obj)\n{this.objects.push(obj);};RGraph.CombinedChart.prototype.draw=RGraph.CombinedChart.prototype.Draw=function()\n{for(var i=0;i<this.objects.length;++i){if(this.objects[i].properties['chart.combinedchart.effect']){var options=this.objects[i].properties['chart.combinedchart.effect.options']?eval('('+this.objects[i].properties['chart.combinedchart.effect.options']+')'):null,callback=this.objects[i].properties['chart.combinedchart.effect.callback'],func=this.objects[i].properties['chart.combinedchart.effect'];(this.objects[i][func])(options,callback);}else{this.objects[i].draw();}}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.bipolar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Bipolar=function(conf)\n{if(typeof conf==='object'&&typeof conf.left==='object'&&typeof conf.right==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),left=conf.left,right=conf.right,parseConfObjectForOptions=true}else{var id=conf,canvas=document.getElementById(id),left=arguments[1],right=arguments[2]}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.type='bipolar';this.coords=[];this.coords2=[];this.coordsLeft=[];this.coordsRight=[];this.coords2Left=[];this.coords2Right=[];this.max=0;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.coordsText=[];this.original_colors=[];this.firstDraw=true;var data=[left,right];for(var i=0;i<2;++i){data[i].forEach(function(v,k,arr)\n{if(RGraph.isNull(v)){}else if(typeof v==='object'){v.forEach(function(v2,k2,arr2)\n{arr[k][k2]=parseFloat(v2);});}else{arr[k]=parseFloat(v);}\narr[k]=RGraph.stringsToNumbers(arr[k]);});}\nthis.left=left;this.right=right;this.data=[left,right];this.properties={'chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.linewidth':1,'chart.background.grid.autofit.numvlines':null,'chart.background.grid.autofit.numhlines':null,'chart.margin':5,'chart.margin.grouped':3,'chart.xtickinterval':null,'chart.labels':[],'chart.labels.color':null,'chart.labels.above':false,'chart.labels.above.font':null,'chart.labels.above.size':null,'chart.labels.above.bold':null,'chart.labels.above.italic':null,'chart.labels.above.color':null,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.labels.above.decimals':0,'chart.labels.above.formatter':null,'chart.text.bold':false,'chart.text.italic':false,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.title':null,'chart.title.font':null,'chart.title.size':null,'chart.title.bold':null,'chart.title.italic':null,'chart.title.color':null,'chart.title.left':null,'chart.title.left.font':null,'chart.title.left.size':null,'chart.title.left.bold':false,'chart.title.left.italic':false,'chart.title.left.color':null,'chart.title.right':null,'chart.title.right.font':null,'chart.title.right.size':null,'chart.title.right.bold':false,'chart.title.right.italic':false,'chart.title.right.color':null,'chart.gutter.center':0,'chart.gutter.center.autosize':true,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':30,'chart.title':null,'chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.colors':['#afa','#faa','#aaf','#aff','#ffa','#faf','cyan','brown','gray','black','pink','#afa','#faa','#aaf','#aff','#ffa','#faf','cyan','brown','gray','black','pink'],'chart.colors.sequential':false,'chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.units.pre':'','chart.units.post':'','chart.shadow':false,'chart.shadow.color':'#ccc','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':3,'chart.annotatable':false,'chart.annotate.color':'black','chart.xmax':null,'chart.xmin':0,'chart.scale.zerostart':true,'chart.scale.decimals':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.axis.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.background':null,'chart.strokestyle':'rgba(0,0,0,0)','chart.events.mousemove':null,'chart.events.click':null,'chart.linewidth':1,'chart.noaxes':false,'chart.noxaxis':false,'chart.noyaxis':false,'chart.xlabels':true,'chart.numyticks':null,'chart.numxticks':5,'chart.axis.linewidth':1,'chart.labels.count':5,'chart.variant.threed.offsetx':10,'chart.variant.threed.offsety':5,'chart.variant.threed.angle':0.1,'chart.grouping':'grouped','chart.clearto':'rgba(0,0,0,0)'}\nthis.properties['chart.numyticks']=this.left.length;var linear_data=RGraph.arrayLinearize(this.left,this.right);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name==='chart.vmargin'){name='chart.margin';}\nif(name==='chart.vmargin.grouped'){name='chart.margin.grouped';}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn this.properties[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];if(prop['chart.gutter.center.autosize']&&!prop['chart.gutter.center']){prop['chart.gutter.center']=this.getGutterCenter();}\nthis.gutterCenter=prop['chart.gutter.center'];this.left=this.data[0];this.right=this.data[1];this.coords=[];this.coords2=[];this.coordsLeft=[];this.coordsRight=[];this.coords2Left=[];this.coords2Right=[];this.coordsText=[];if(prop['chart.variant']==='3d'){if(prop['chart.text.accessible']){}else{co.setTransform(1,prop['chart.variant.threed.angle'],0,1,0.5,0.5);}}\nthis.axisWidth=(ca.width-prop['chart.gutter.center']-this.gutterLeft-this.gutterRight)/2;this.axisHeight=ca.height-this.gutterTop-this.gutterBottom;this.sequentialFullIndex=0;this.getMax();this.drawBackgroundGrid();this.draw3DAxes();this.drawAxes();this.drawTicks();this.drawLeftBars();this.drawRightBars();this.drawLeftBars({shadow:false});this.drawRightBars({shadow:false});this.drawAxes();this.drawLabels();this.drawTitles();if(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.draw3DAxes=function()\n{if(prop['chart.variant']==='3d'){var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.lineWidth=prop['chart.axis.linewidth']+0.001;co.beginPath();co.strokeStyle=prop['chart.axis.color'];pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.gutterLeft,ma.round(ca.height-this.gutterBottom),this.gutterLeft+offsetx,ma.round(ca.height-this.gutterBottom-offsety),this.gutterLeft+offsetx+this.axisWidth,ma.round(ca.height-this.gutterBottom-offsety),this.gutterLeft+this.axisWidth,ma.round(ca.height-this.gutterBottom));this.draw3DLeftVerticalAxis();pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.gutterLeft+this.gutterCenter+this.axisWidth,ma.round(ca.height-this.gutterBottom),this.gutterLeft+this.gutterCenter+this.axisWidth+offsetx,ma.round(ca.height-this.gutterBottom-offsety),this.gutterLeft+this.gutterCenter+this.axisWidth+this.axisWidth+offsetx,ma.round(ca.height-this.gutterBottom-offsety),this.gutterLeft+this.gutterCenter+this.axisWidth+this.axisWidth,ma.round(ca.height-this.gutterBottom));pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.gutterLeft+this.gutterCenter+this.axisWidth,ca.height-this.gutterBottom,this.gutterLeft+this.gutterCenter+this.axisWidth,ca.height-this.gutterBottom-this.axisHeight,this.gutterLeft+this.gutterCenter+this.axisWidth+offsetx,ca.height-this.gutterBottom-this.axisHeight-offsety,this.gutterLeft+this.gutterCenter+this.axisWidth+offsetx,ca.height-this.gutterBottom-offsety);}}\nthis.draw3DLeftVerticalAxis=function()\n{if(prop['chart.variant']==='3d'){var offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];pa2(co,'b m % % l % % l % % l % % s #aaa f #ddd',this.gutterLeft+this.axisWidth,this.gutterTop,this.gutterLeft+this.axisWidth+offsetx,this.gutterTop-offsety,this.gutterLeft+this.axisWidth+offsetx,ca.height-this.gutterBottom-offsety,this.gutterLeft+this.axisWidth,ca.height-this.gutterBottom);}};this.drawAxes=this.DrawAxes=function()\n{co.lineWidth=prop['chart.axis.linewidth']+0.001;co.beginPath();co.strokeStyle=prop['chart.axis.color'];this.axisWidth=(ca.width-prop['chart.gutter.center']-this.gutterLeft-this.gutterRight)/2;this.axisHeight=ca.height-this.gutterTop-this.gutterBottom;if(prop['chart.noaxes']){return;}\nif(!prop['chart.noxaxis']){co.moveTo(this.gutterLeft,ma.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft+this.axisWidth,ma.round(ca.height-this.gutterBottom));}\nif(!prop['chart.noyaxis']){co.moveTo(ma.round(this.gutterLeft+this.axisWidth),ca.height-this.gutterBottom);co.lineTo(ma.round(this.gutterLeft+this.axisWidth),this.gutterTop);}\nco.stroke();co.beginPath();var x=this.gutterLeft+this.axisWidth+prop['chart.gutter.center'];if(!prop['chart.noyaxis']){co.moveTo(ma.round(x),this.gutterTop);co.lineTo(ma.round(x),ca.height-this.gutterBottom);}\nif(!prop['chart.noxaxis']){co.moveTo(ma.round(x),ma.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight,ma.round(ca.height-this.gutterBottom));}\nco.stroke();};this.drawTicks=this.DrawTicks=function()\n{co.lineWidth=prop['chart.axis.linewidth']+0.001;var numDataPoints=this.left.length;var barHeight=((ca.height-this.gutterTop-this.gutterBottom)-(this.left.length*(prop['chart.margin']*2)))/numDataPoints;this.barHeight=barHeight;if(prop['chart.noaxes']){return;}\nif(!prop['chart.noyaxis']&&prop['chart.numyticks']>0){co.beginPath();for(var i=0;i<prop['chart.numyticks'];++i){var y=prop['chart.gutter.top']+(((ca.height-this.gutterTop-this.gutterBottom)/prop['chart.numyticks'])*i);co.moveTo(this.gutterLeft+this.axisWidth,y);co.lineTo(this.gutterLeft+this.axisWidth+3,y);}\nco.stroke();co.beginPath();for(var i=0;i<prop['chart.numyticks'];++i){var y=prop['chart.gutter.top']+(((ca.height-this.gutterTop-this.gutterBottom)/prop['chart.numyticks'])*i);co.moveTo(this.gutterLeft+this.axisWidth+prop['chart.gutter.center'],y);co.lineTo(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']-3,y);}\nco.stroke();if(prop['chart.noxaxis']){pa2(co,'b m % % l % % s %',ma.round(this.gutterLeft+this.axisWidth),ca.height-this.gutterBottom,ma.round(this.gutterLeft+this.axisWidth+4),(ca.height-this.gutterBottom),co.strokeStyle);pa2(co,'b m % % l % % s %',ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']),ca.height-this.gutterBottom,ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center'])-4,(ca.height-this.gutterBottom),co.strokeStyle);}}\nif(!prop['chart.noxaxis']&&prop['chart.numxticks']>0){var xInterval=this.axisWidth/prop['chart.numxticks'];if(typeof(prop['chart.xtickinterval'])=='number'){xInterval=prop['chart.xtickinterval'];}\nfor(i=this.gutterLeft;i<(this.gutterLeft+this.axisWidth);i+=xInterval){co.beginPath();co.moveTo(ma.round(i),ca.height-this.gutterBottom);co.lineTo(ma.round(i),(ca.height-this.gutterBottom)+4);co.closePath();co.stroke();}\nvar stoppingPoint=ca.width-this.gutterRight;for(i=(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']+xInterval);i<=stoppingPoint;i+=xInterval){co.beginPath();co.moveTo(ma.round(i),ca.height-this.gutterBottom);co.lineTo(ma.round(i),(ca.height-this.gutterBottom)+4);co.closePath();co.stroke();}\nif(prop['chart.noyaxis']){pa2(co,'b m % % l % % s %',ma.round(this.gutterLeft+this.axisWidth),ca.height-this.gutterBottom,ma.round(this.gutterLeft+this.axisWidth),(ca.height-this.gutterBottom)+4,co.strokeStyle);pa2(co,'b m % % l % % s %',ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']),ca.height-this.gutterBottom,ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']),(ca.height-this.gutterBottom)+4,co.strokeStyle);}}};this.getMax=this.GetMax=function()\n{var dec=prop['chart.scale.decimals'];if(prop['chart.xmax']){var max=prop['chart.xmax'];var min=prop['chart.xmin'];this.scale2=RG.getScale2(this,{max:max,min:min,strict:true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}else{var max=1;for(var i=0;i<this.left.length;++i){if(typeof this.left[i]==='number'){max=ma.max(max,this.left[i]);}else if(RG.isNull(this.left[i])){}else{max=ma.max(max,prop['chart.grouping']==='stacked'?RG.arraySum(this.left[i]):RG.arrayMax(this.left[i]));}}\nfor(var i=0;i<this.right.length;++i){if(typeof this.right[i]==='number'){max=ma.max(max,this.right[i]);}else if(RG.isNull(this.right[i])){}else{max=ma.max(max,prop['chart.grouping']==='stacked'?RG.arraySum(this.right[i]):RG.arrayMax(this.right[i]));}}\nthis.scale2=RG.getScale2(this,{max:max,min:prop['chart.xmin'],'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}};this.drawLeftBars=this.DrawLeftBars=function()\n{var opt={};if(typeof arguments[0]==='object'){opt.shadow=arguments[0].shadow;}else{opt.shadow=true;}\nvar offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth'];for(var i=0,sequentialColorIndex=0;i<this.left.length;++i){if(prop['chart.shadow']&&prop['chart.variant']!=='3d'&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}\nif(typeof this.left[i]==='number'){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors'].length===2){co.fillStyle=prop['chart.colors'][0];}}\nvar width=(((this.left[i]-this.min)/(this.max-this.min))*this.axisWidth);var coords=[ma.round(this.gutterLeft+this.axisWidth-width),ma.round(this.gutterTop+(i*(this.axisHeight/this.left.length))+prop['chart.margin']),width,this.barHeight];if(this.left[i]!==null){co.strokeRect(coords[0],coords[1],coords[2],coords[3]);co.fillRect(coords[0],coords[1],coords[2],coords[3]);}\nif(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety+coords[3],coords[0]+offsetx,coords[1]-offsety+coords[3]);}\nif(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][i];}else{co.fillStyle=prop['chart.colors'][0];}\npa2(co,'b m % % l % % l % % l % % f %',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);}\nif(!opt.shadow){this.coords.push([coords[0],coords[1],coords[2],coords[3]]);this.coordsLeft.push([coords[0],coords[1],coords[2],coords[3]]);}\nsequentialColorIndex++;}else if(typeof this.left[i]==='object'&&prop['chart.grouping']==='stacked'){for(var j=0,accumulatedWidth=0;j<this.left[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\nvar value=this.left[i][j],min=this.min,max=this.max,margin=prop['chart.margin'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=ma.round((this.axisHeight/this.left.length)),height=ma.round((sectionHeight-(2*margin))),x=ma.round(this.gutterLeft+this.axisWidth-width-accumulatedWidth),y=ma.round(this.gutterTop+margin+(i*sectionHeight));accumulatedWidth+=width;if(this.left[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}\nif(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}\nif(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\npa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}\nif(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsLeft.push([x,y,width,height]);if(!RG.isArray(this.coords2[i])){this.coords2[i]=[];}\nthis.coords2[i].push([x,y,width,height]);if(!RG.isArray(this.coords2Left[i])){this.coords2Left[i]=[];}\nthis.coords2Left[i].push([x,y,width,height]);}\nsequentialColorIndex++;}}else if(typeof this.left[i]==='object'&&!RG.isNull(this.left[i])){for(var j=0;j<this.left[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\nvar value=this.left[i][j],min=this.min,max=this.max,margin=prop['chart.margin'],marginGrouped=prop['chart.margin.grouped'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=ma.round((this.axisHeight/this.left.length)),height=ma.round((sectionHeight-(2*margin)-(2*marginGrouped))/this.left[i].length),x=ma.round(this.gutterLeft+this.axisWidth-width),y=ma.round(this.gutterTop+margin+(i*sectionHeight)+(height*j)+(j*marginGrouped));if(this.left[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}\nif(prop['chart.variant']==='3d'&&this.left[i]!==null){if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}\nif(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\npa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.4)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}\nif(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsLeft.push([x,y,width,height]);if(!RG.isArray(this.coords2[i])){this.coords2[i]=[];}\nthis.coords2[i].push([x,y,width,height]);if(!RG.isArray(this.coords2Left[i])){this.coords2Left[i]=[];}\nthis.coords2Left[i].push([x,y,width,height]);}\nsequentialColorIndex++;}}\nthis.draw3DLeftVerticalAxis();}\nRG.noShadow(this);co.lineWidth=1;};this.drawRightBars=this.DrawRightBars=function()\n{var opt={};if(typeof arguments[0]==='object'){opt.shadow=arguments[0].shadow;}else{opt.shadow=true;}\nvar offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'];co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth'];if(prop['chart.shadow']&&prop['chart.variant']!=='3d'&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}\nfor(var i=0,sequentialColorIndex=RG.arrayLinearize(this.left).length;i<this.right.length;++i){if(typeof this.right[i]==='number'){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors'].length===2){co.fillStyle=prop['chart.colors'][1];}}\nvar width=(((this.right[i]-this.min)/(this.max-this.min))*this.axisWidth);var coords=[Math.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']),Math.round(prop['chart.margin']+(i*(this.axisHeight/this.right.length))+this.gutterTop),width,this.barHeight];if(this.right[i]!==null){co.strokeRect(coords[0],coords[1],coords[2],coords[3]);co.fillRect(coords[0],coords[1],coords[2],coords[3]);}\nif(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety+coords[3],coords[0]+offsetx,coords[1]-offsety+coords[3]);}\npa2(co,'b m % % l % % l % % l % % f %',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1],color);pa2(co,'b m % % l % % l % % l % % f %',coords[0]+coords[2],coords[1],coords[0]+coords[2]+offsetx,coords[1]-offsety,coords[0]+coords[2]+offsetx,coords[1]-offsety+coords[3],coords[0]+coords[2],coords[1]+coords[3],color);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',coords[0],coords[1],coords[0]+offsetx,coords[1]-offsety,coords[0]+offsetx+coords[2],coords[1]-offsety,coords[0]+coords[2],coords[1]);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',coords[0]+coords[2],coords[1],coords[0]+coords[2]+offsetx,coords[1]-offsety,coords[0]+coords[2]+offsetx,coords[1]-offsety+coords[3],coords[0]+coords[2],coords[1]+coords[3]);}\nif(!opt.shadow){this.coords.push([coords[0],coords[1],coords[2],coords[3]]);this.coordsRight.push([coords[0],coords[1],coords[2],coords[3]]);}\nsequentialColorIndex++;}else if(typeof this.left==='object'&&prop['chart.grouping']==='stacked'){for(var j=0,accumulatedWidth=0;j<this.right[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\nvar value=this.right[i][j],min=this.min,max=this.max,margin=prop['chart.margin'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=ma.round((this.axisHeight/this.right.length)),height=ma.round((sectionHeight-(2*margin))),x=ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']+accumulatedWidth),y=ma.round(this.gutterTop+margin+(i*sectionHeight));accumulatedWidth+=width;if(this.right[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}\nif(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}\npa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y,color);if(j===(this.right[i].length-1)){pa2(co,'b m % % l % % l % % l % % f %',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height,color);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height);}\npa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);}\nif(!opt.shadow){this.coords.push([x,y,width,height]);if(!RG.isArray(this.coords2[sequentialColorIndex])){this.coords2[sequentialColorIndex]=[];}\nthis.coords2[sequentialColorIndex].push([x,y,width,height]);this.coordsRight.push([x,y,width,height]);if(!RG.isArray(this.coords2Right[i])){this.coords2Right[i]=[];}\nthis.coords2Right[i].push([x,y,width,height]);}\nsequentialColorIndex++;}}else if(typeof this.right[i]==='object'){for(var j=0;j<this.right[i].length;++j){if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex];}else{co.fillStyle=prop['chart.colors'][j];}\nvar value=this.right[i][j],min=this.min,max=this.max,margin=prop['chart.margin'],marginGrouped=prop['chart.margin.grouped'],width=(((value-min)/(max-min))*this.axisWidth),sectionHeight=ma.round((this.axisHeight/this.right.length)),height=ma.round((sectionHeight-(2*margin)-(2*marginGrouped))/this.right[i].length),x=ma.round(this.gutterLeft+this.axisWidth+prop['chart.gutter.center']),y=ma.round(this.gutterTop+margin+(i*sectionHeight)+(height*j)+(j*marginGrouped));if(this.right[i]!==null){co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);}\nif(!opt.shadow){this.coords.push([x,y,width,height]);this.coordsRight.push([x,y,width,height]);if(!RG.isArray(this.coords2[this.left.length+i])){this.coords2[this.left.length+i]=[];}\nthis.coords2[this.left.length+i].push([x,y,width,height]);if(!RG.isArray(this.coords2Right[i])){this.coords2Right[i]=[];}\nthis.coords2Right[i].push([x,y,width,height]);}\nsequentialColorIndex++;if(prop['chart.variant']==='3d'&&this.right[i]!==null){var color=co.fillStyle;if(prop['chart.shadow']&&opt.shadow){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];pa2(co,'b m % % l % % l % % l % % f black sc rgba(0,0,0,0) sx 0 sy 0 sb 0',x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+offsetx+width,y-offsety+height,x+offsetx,y-offsety+height);}\npa2(co,'b m % % l % % l % % l % % f %',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y,color);pa2(co,'b m % % l % % l % % l % % f %',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height,color);pa2(co,'b m % % l % % l % % l % % f rgba(255,255,255,0.6)',x,y,x+offsetx,y-offsety,x+offsetx+width,y-offsety,x+width,y);pa2(co,'b m % % l % % l % % l % % f rgba(0,0,0,0.3)',x+width,y,x+width+offsetx,y-offsety,x+width+offsetx,y-offsety+height,x+width,y+height);}}}}\nRG.noShadow(this);co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()\n{var font=prop['chart.labels.font']||prop['chart.text.font'],color=prop['chart.labels.color']||prop['chart.text.color'],size=prop['chart.labels.size']||prop['chart.text.size'],bold=typeof prop['chart.labels.bold']==='boolean'?prop['chart.labels.bold']:prop['chart.text.bold'],italic=typeof prop['chart.labels.italic']==='boolean'?prop['chart.labels.italic']:prop['chart.text.italic'],labels=prop['chart.labels'],barAreaHeight=ca.height-this.gutterTop-this.gutterBottom\nco.fillStyle=color;for(var i=0,len=labels.length;i<len;++i){RG.text2(this,{color:color,font:font,size:size,x:this.gutterLeft+this.axisWidth+(prop['chart.gutter.center']/2),y:this.gutterTop+((barAreaHeight/labels.length)*(i))+((barAreaHeight/labels.length)/2),text:String(labels[i]?String(labels[i]):''),halign:'center',valign:'center',marker:false,bold:bold,italic:italic,tag:'labels'});}\nco.fillStyle=prop['chart.text.color'];if(prop['chart.xlabels']){var grapharea=(ca.width-prop['chart.gutter.center']-this.gutterLeft-this.gutterRight)/2,font=prop['chart.text.font'],size=prop['chart.text.size'],bold=prop['chart.text.bold'],italic=prop['chart.text.italic'],color=prop['chart.text.color'];for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{font:font,size:size,bold:bold,italic:italic,x:this.gutterLeft+((grapharea/this.scale2.labels.length)*i),y:ca.height-this.gutterBottom+3,text:this.scale2.labels[this.scale2.labels.length-i-1],valign:'top',halign:'center',color:color,tag:'scale'});RG.text2(this,{font:font,size:size,bold:bold,italic:italic,x:this.gutterLeft+grapharea+prop['chart.gutter.center']+((grapharea/this.scale2.labels.length)*(i+1)),y:ca.height-this.gutterBottom+3,text:this.scale2.labels[i],valign:'top',halign:'center',tag:'scale'});}\nif(prop['chart.scale.zerostart']){RG.text2(this,{font:font,size:size,bold:bold,italic:italic,x:this.gutterLeft+this.axisWidth,y:ca.height-this.gutterBottom+3,text:typeof prop['chart.scale.formatter']==='function'?(prop['chart.scale.formatter'])(this,0):RG.numberFormat(this,(0).toFixed(prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']),valign:'top',halign:'center',tag:'scale'});RG.text2(this,{font:font,size:size,bold:bold,italic:italic,x:this.gutterLeft+this.axisWidth+this.gutterCenter,y:ca.height-this.gutterBottom+3,text:typeof prop['chart.scale.formatter']==='function'?(prop['chart.scale.formatter'])(this,0):RG.numberFormat(this,(0).toFixed(prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']),valign:'top',halign:'center',tag:'scale'});}}\nif(prop['chart.labels.above']){this.drawLabelsAbove();}};this.drawLabelsAbove=function()\n{var coordsLeft=this.coordsLeft,coordsRight=this.coordsRight;for(var i=0,seq=0;i<coordsLeft.length;++i,++seq){if(typeof this.left[i]=='number'){var coords=coordsLeft[i];RG.text2(this,{font:prop['chart.labels.above.font']||prop['chart.text.font'],size:prop['chart.labels.above.size']||prop['chart.text.size'],x:coords[0]-5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.left[i]):RG.numberFormat(this,this.left[i].toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),prop['chart.labels.above.units.pre'],prop['chart.labels.above.units.post']),valign:'center',halign:'right',color:prop['chart.labels.above.color']||prop['chart.text.color'],bold:typeof prop['chart.labels.above.bold']==='boolean'?prop['chart.labels.above.bold']:prop['chart.text.bold'],italic:typeof prop['chart.labels.above.italic']==='boolean'?prop['chart.labels.above.italic']:prop['chart.text.italic'],tag:'labels.above'});}else if(typeof this.left[i]==='object'){for(var j=0;j<this.left[i].length;++j,++seq){if(prop['chart.grouping']==='stacked'&&j!==(this.left[i].length-1)){continue;}\nvar coords=coordsLeft[seq];RG.text2(this,{font:prop['chart.labels.above.font']||prop['chart.text.font'],size:prop['chart.labels.above.size']||prop['chart.text.size'],x:coords[0]-5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.left[i][j]):RG.numberFormat(this,RG.isNull(this.left[i][j])||isNaN(this.left[i][j])?'':(prop['chart.grouping']==='stacked'?RG.arraySum(this.left[i]):Number(this.left[i][j])).toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),prop['chart.labels.above.units.pre'],prop['chart.labels.above.units.post']),valign:'center',halign:'right',color:prop['chart.labels.above.color']||null,bold:typeof prop['chart.labels.above.bold']==='boolean'?prop['chart.labels.above.bold']:false,italic:typeof prop['chart.labels.above.italic']==='boolean'?prop['chart.labels.above.italic']:false,tag:'labels.above'});}\nseq--;}}\nfor(i=0,seq=0;i<coordsRight.length;++i,++seq){if(typeof this.right[i]==='number'){var coords=coordsRight[i];RG.text2(this,{font:prop['chart.labels.above.font']||prop['chart.text.font'],size:prop['chart.labels.above.size']||prop['chart.text.size'],x:coords[0]+coords[2]+5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.right[i]):RG.numberFormat(this,this.right[i].toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),prop['chart.labels.above.units.pre'],prop['chart.labels.above.units.post']),valign:'center',halign:'left',color:prop['chart.labels.above.color']||null,bold:typeof prop['chart.labels.above.bold']==='boolean'?prop['chart.labels.above.bold']:false,italic:typeof prop['chart.labels.above.italic']==='boolean'?prop['chart.labels.above.italic']:false,tag:'labels.above'});}else if(typeof this.right[i]==='object'){for(var j=0;j<this.right[i].length;++j,++seq){if(prop['chart.grouping']==='stacked'&&j!==(this.right[i].length-1)){continue;}\nvar coords=coordsRight[seq];RG.text2(this,{font:prop['chart.labels.above.font']||prop['chart.text.font'],size:prop['chart.labels.above.size']||prop['chart.text.size'],x:coords[0]+coords[2]+5,y:coords[1]+(coords[3]/2),text:typeof prop['chart.labels.above.formatter']==='function'?prop['chart.labels.above.formatter'](this,this.right[i][j]):RG.numberFormat(this,RG.isNull(this.right[i][j])||isNaN(this.right[i][j])?'':prop['chart.grouping']==='stacked'?RG.arraySum(this.right[i]).toFixed(prop['chart.labels.above.decimals']):Number(this.right[i][j]).toFixed(typeof prop['chart.labels.above.decimals']==='number'?prop['chart.labels.above.decimals']:0),prop['chart.labels.above.units.pre'],prop['chart.labels.above.units.post']),valign:'center',halign:'left',color:prop['chart.labels.above.color']||null,bold:typeof prop['chart.labels.above.bold']==='boolean'?prop['chart.labels.above.bold']:false,italic:typeof prop['chart.labels.above.italic']==='boolean'?prop['chart.labels.above.italic']:false,tag:'labels.above'});}\n--seq;}}};this.drawTitles=this.DrawTitles=function()\n{if(typeof prop['chart.title.left']==='string'){RG.text2(this,{font:prop['chart.title.left.font']||prop['chart.text.font'],size:prop['chart.title.left.size']||prop['chart.text.size'],x:this.gutterLeft+5,y:this.gutterTop-5,text:prop['chart.title.left'],halign:'left',valign:'bottom',bold:typeof prop['chart.title.left.bold']==='boolean'?prop['chart.title.left.bold']:prop['chart.text.bold'],italic:typeof prop['chart.title.left.italic']==='boolean'?prop['chart.title.left.italic']:prop['chart.text.italic'],color:prop['chart.title.left.color']||prop['chart.text.color'],tag:'title.left'});}\nif(typeof prop['chart.title.right']==='string'){RG.text2(this,{font:prop['chart.title.right.font']||prop['chart.text.font'],size:prop['chart.title.right.size']||prop['chart.text.size'],x:ca.width-this.gutterRight-5,y:this.gutterTop-5,text:prop['chart.title.right'],halign:'right',valign:'bottom',bold:typeof prop['chart.title.right.bold']==='boolean'?prop['chart.title.right.bold']:prop['chart.right.bold'],italic:typeof prop['chart.title.right.italic']==='boolean'?prop['chart.title.right.italic']:prop['chart.right.italic'],color:prop['chart.title.right.color']||prop['chart.text.color'],tag:'title.right'});}\nif(typeof prop['chart.title']==='string'){RG.drawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.size']?prop['chart.title.size']:null);}};this.drawIEShadow=this.DrawIEShadow=function(coords)\n{var prevFillStyle=co.fillStyle;var offsetx=prop['chart.shadow.offsetx'];var offsety=prop['chart.shadow.offsety'];co.lineWidth=prop['chart.linewidth'];co.fillStyle=prop['chart.shadow.color'];co.beginPath();co.fillRect(coords[0]+offsetx,coords[1]+offsety,coords[2],coords[3]);co.fill();co.fillStyle=prevFillStyle;}\nthis.getShape=this.getBar=function(e)\n{var canvas=this.canvas,context=this.context,mouseXY=RG.getMouseXY(e)\nfor(var i=0;i<this.coords.length;i++){var mouseX=mouseXY[0],mouseY=mouseXY[1],left=this.coords[i][0],top=this.coords[i][1],width=this.coords[i][2],height=this.coords[i][3]\nif(prop['chart.variant']==='3d'){pa2(co,'b r % % % %',left,top,width,height);var over=co.isPointInPath(mouseX,mouseY);}else{var over=(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height));}\nif(over){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,1:left,2:top,3:width,4:height,5:i,object:this,x:left,y:top,width:width,height:height,index:i,tooltip:tooltip};}}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getValue=function(e)\n{var obj=e.target.__object__;var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];if(mouseX>this.gutterLeft&&mouseX<((ca.width/2)-(prop['chart.gutter.center']/2))){var value=(mouseX-prop['chart.gutter.left'])/this.axisWidth;value=this.max-(value*this.max);}\nif(mouseX<(ca.width-this.gutterRight)&&mouseX>((ca.width/2)+(prop['chart.gutter.center']/2))){var value=(mouseX-prop['chart.gutter.left']-this.axisWidth-prop['chart.gutter.center'])/this.axisWidth;value=(value*this.max);}\nreturn value;};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>prop['chart.gutter.left']&&mouseXY[0]<(ca.width-prop['chart.gutter.right'])&&mouseXY[1]>prop['chart.gutter.top']&&mouseXY[1]<(ca.height-prop['chart.gutter.bottom'])){return this;}};this.getXCoord=function(value)\n{if(value>this.max||value<0){return null;}\nvar ret=[];var offset=((value/this.max)*this.axisWidth);ret[0]=(this.gutterLeft+this.axisWidth)-offset;ret[1]=(ca.width-this.gutterRight-this.axisWidth)+offset;return ret;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.axis.color']=RG.array_clone(prop['chart.axis.color']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);}\nvar props=this.properties;var colors=props['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}\nprops['chart.highlight.stroke']=this.parseSingleColorForGradient(props['chart.highlight.stroke']);props['chart.highlight.fill']=this.parseSingleColorForGradient(props['chart.highlight.fill']);props['chart.axis.color']=this.parseSingleColorForGradient(props['chart.axis.color']);props['chart.strokestyle']=this.parseSingleColorForGradient(props['chart.strokestyle']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.drawBackgroundGrid=function()\n{if(prop['chart.background.grid']){var variant=prop['chart.variant'],color=prop['chart.background.grid.color'],numvlines=prop['chart.labels.count'],numhlines=this.left.length,vlines=prop['chart.background.grid.vlines'],hlines=prop['chart.background.grid.hlines'],linewidth=prop['chart.background.grid.linewidth'];if(typeof prop['chart.background.grid.autofit.numhlines']==='number'){numhlines=prop['chart.background.grid.autofit.numhlines'];}\nif(typeof prop['chart.background.grid.autofit.numvlines']==='number'){numvlines=prop['chart.background.grid.autofit.numvlines'];}\nco.lineWidth=linewidth;if(variant=='3d'){co.save();co.translate(prop['chart.variant.threed.offsetx'],-1*prop['chart.variant.threed.offsety']);}\nif(vlines){for(var i=0;i<=numvlines;i+=1){pa2(co,'b m % % l % % s %',this.gutterLeft+(this.axisWidth/numvlines)*i,this.gutterTop,this.gutterLeft+(this.axisWidth/numvlines)*i,this.gutterTop+this.axisHeight,color);}}\nif(hlines){for(var i=0;i<=numhlines;i+=1){pa2(co,'b m % % l % % s %',this.gutterLeft,this.gutterTop+(this.axisHeight/numhlines)*i,this.gutterLeft+this.axisWidth,this.gutterTop+(this.axisHeight/numhlines)*i,color);}}\nif(vlines){for(var i=0;i<=numvlines;i+=1){pa2(co,'b m % % l % % s %',this.gutterLeft+this.gutterCenter+this.axisWidth+(this.axisWidth/numvlines)*i,this.gutterTop,this.gutterLeft+this.gutterCenter+this.axisWidth+(this.axisWidth/numvlines)*i,this.gutterTop+this.axisHeight,color);}}\nif(hlines){for(var i=0;i<=numhlines;i+=1){pa2(co,'b m % % l % % s %',this.gutterLeft+this.axisWidth+this.gutterCenter,this.gutterTop+(this.axisHeight/numhlines)*i,this.gutterLeft+this.axisWidth+this.gutterCenter+this.axisWidth,this.gutterTop+(this.axisHeight/numhlines)*i,color);}}\nif(variant=='3d'){co.restore();}}};this.firstDrawFunc=function()\n{};this.getGutterCenter=function()\n{var bold=typeof prop['chart.labels.bold']==='boolean'?prop['chart.labels.bold']:prop['chart.text.bold'],font=typeof prop['chart.labels.font']==='string'?prop['chart.labels.font']:prop['chart.text.font'],size=typeof prop['chart.labels.size']==='number'?prop['chart.labels.size']:prop['chart.text.size'];for(var i=0,len=0;i<prop['chart.labels'].length;++i){len=ma.max(len,RG.measureText(prop['chart.labels'][i],bold,font,size)[0]);}\nreturn len+15;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}\nthis.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){},obj=this;var originalLeft=RG.arrayClone(this.left),originalRight=RG.arrayClone(this.right);if(RG.isNull(prop['chart.xmax'])){var xmax=0;this.getMax();this.Set('chart.xmax',this.scale2.max);}\nvar iterator=function()\n{var easingMultiplier=RG.Effects.getEasingMultiplier(frames,frame);for(var i=0;i<obj.left.length;i+=1){if(typeof obj.left[i]==='number'){obj.left[i]=easingMultiplier*originalLeft[i];}else{for(var j=0;j<obj.left[i].length;++j){obj.left[i][j]=easingMultiplier*originalLeft[i][j];}}}\nfor(var i=0;i<obj.right.length;i+=1){if(typeof obj.right[i]==='number'){obj.right[i]=easingMultiplier*originalRight[i];}else{for(var j=0;j<obj.right[i].length;++j){obj.right[i][j]=easingMultiplier*originalRight[i][j];}}}\nRG.redrawCanvas(obj.canvas);if(frame<frames){frame+=1;RG.Effects.updateCanvas(iterator);}else{callback(obj);}};iterator();return this;};this.wave=function()\n{var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||120;opt.startFrames_left=[];opt.startFrames_right=[];opt.counters_left=[];opt.counters_right=[];var framesperbar=opt.frames/3,frame_left=-1,frame_right=-1,callback=arguments[1]||function(){},original_left=RG.arrayClone(obj.left),original_right=RG.arrayClone(obj.right);for(var i=0,len=obj.left.length;i<len;i+=1){opt.startFrames_left[i]=((opt.frames/3)/(obj.left.length-1))*i;opt.startFrames_right[i]=((opt.frames/3)/(obj.right.length-1))*i;opt.counters_left[i]=0;opt.counters_right[i]=0;}\nobj.draw();obj.set('xmax',obj.scale2.max);RG.clear(obj.canvas);for(var i=0,len=obj.left.length;i<len;i+=1){if(typeof obj.left[i]==='number')obj.left[i]=0;if(typeof obj.right[i]==='number')obj.right[i]=0;}\nfunction iteratorLeft()\n{++frame_left;for(var i=0,len=obj.left.length;i<len;i+=1){if(frame_left>opt.startFrames_left[i]){var isNull=RG.isNull(obj.left[i]);if(typeof obj.left[i]==='number'){obj.left[i]=ma.min(ma.abs(original_left[i]),ma.abs(original_left[i]*((opt.counters_left[i]++)/framesperbar)));if(original_left[i]<0){obj.left[i]*=-1;}}else if(RG.isArray(obj.left[i])){for(var j=0;j<obj.left[i].length;++j){obj.left[i][j]=ma.min(ma.abs(original_left[i][j]),ma.abs(original_left[i][j]*((opt.counters_left[i]++)/framesperbar)));if(original_left[i][j]<0){obj.left[i][j]*=-1;}}}\nif(isNull){obj.left[i]=null;}}else{obj.left[i]=typeof obj.left[i]==='object'&&obj.left[i]?RG.arrayPad([],obj.left[i].length,0):(RG.isNull(obj.left[i])?null:0);}}\nif(frame_left<opt.frames){RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iteratorLeft);}}\nfunction iteratorRight()\n{++frame_right;for(var i=0,len=obj.right.length;i<len;i+=1){if(frame_right>opt.startFrames_right[i]){var isNull=RG.isNull(obj.right[i]);if(typeof obj.left[i]==='number'){obj.right[i]=ma.min(ma.abs(original_right[i]),ma.abs(original_right[i]*((opt.counters_right[i]++)/framesperbar)));if(original_right[i]<0){obj.right[i]*=-1;}\nif(isNull){obj.right[i]=null;}}else if(RG.isArray(obj.right[i])){for(var j=0;j<obj.right[i].length;++j){obj.right[i][j]=ma.min(ma.abs(original_right[i][j]),ma.abs(original_right[i][j]*((opt.counters_right[i]++)/framesperbar)));if(original_right[i][j]<0){obj.right[i][j]*=-1;}}}}else{obj.right[i]=typeof obj.right[i]==='object'&&obj.right[i]?RG.arrayPad([],obj.right[i].length,0):(RG.isNull(obj.right[i])?null:0);}}\nif(frame_right<opt.frames){RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iteratorRight);}else{callback(this);}}\niteratorLeft();iteratorRight();return this;};};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.annotate.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.annotating_canvas_onmousedown=function(e)\n{if(e.button===0){e.target.__object__.Set('chart.mousedown',true);var obj=e.target.__object__,prop=obj.properties\nobj.context.beginPath();obj.context.strokeStyle=obj.Get('chart.annotate.color');obj.context.lineWidth=obj.Get('chart.annotate.linewidth');var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]\nif(obj.type==='bar'&&prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseY-=adjustment;}\nRG.Registry.Set('annotate.actions',[obj.Get('chart.annotate.color')]);obj.context.moveTo(mouseX,mouseY);RG.Registry.Set('annotate.last.coordinates',[mouseX,mouseY]);RG.Registry.Set('started.annotating',false);RG.Registry.Set('chart.annotating',obj);RG.FireCustomEvent(obj,'onannotatebegin');}\nreturn false;};RG.annotating_window_onmouseup=function(e)\n{var obj=RG.Registry.Get('chart.annotating');var win=window;if(e.button!=0||!obj){return;}\nvar tags=doc.getElementsByTagName('canvas');for(var i=0;i<tags.length;++i){if(tags[i].__object__){tags[i].__object__.Set('chart.mousedown',false);}}\nif(RG.Registry.Get('annotate.actions')&&RG.Registry.Get('annotate.actions').length>0&&win.localStorage){var id='__rgraph_annotations_'+e.target.id+'__';var annotations=win.localStorage[id]?win.localStorage[id]+'|':'';annotations+=RG.Registry.Get('annotate.actions');win.localStorage[id]=annotations;}\nRG.Registry.Set('annotate.actions',[]);RG.FireCustomEvent(obj,'onannotateend');};RGraph.annotating_canvas_onmousemove=function(e)\n{var obj=e.target.__object__;var prop=obj.properties;var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var lastXY=RG.Registry.Get('annotate.last.coordinates');if(obj.Get('chart.mousedown')){if(obj.type==='bar'&&prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseY-=adjustment;}\nobj.context.beginPath();if(!lastXY){obj.context.moveTo(mouseX,mouseY)}else{obj.context.strokeStyle=obj.properties['chart.annotate.color'];obj.context.moveTo(lastXY[0],lastXY[1]);obj.context.lineTo(mouseX,mouseY);}\nRG.Registry.Set('annotate.actions',RG.Registry.Get('annotate.actions')+'|'+mouseX+','+mouseY);RG.Registry.Set('annotate.last.coordinates',[mouseX,mouseY]);RG.FireCustomEvent(obj,'onannotate');obj.context.stroke();}};RG.ShowPalette=RG.Showpalette=function(e)\n{var isSafari=navigator.userAgent.indexOf('Safari')?true:false;e=RG.FixEventObject(e);var canvas=e.target.parentNode.__canvas__,context=canvas.getContext('2d'),obj=canvas.__object__,div=document.createElement('DIV'),coords=RG.getMouseXY(e)\ndiv.__object__=obj;div.className='RGraph_palette';div.style.position='absolute';div.style.backgroundColor='white';div.style.border='1px solid black';div.style.left=0;div.style.top=0;div.style.padding='3px';div.style.paddingLeft='5px';div.style.opacity=0;div.style.boxShadow='rgba(96,96,96,0.5) 3px 3px 3px';div.style.WebkitBoxShadow='rgba(96,96,96,0.5) 3px 3px 3px';div.style.MozBoxShadow='rgba(96,96,96,0.5) 3px 3px 3px';var colors=['Black','Red','Yellow','Green','Orange','White','Magenta','Pink'];for(var i=0,len=colors.length;i<len;i+=1){var div2=doc.createElement('DIV');div2.cssClass='RGraph_palette_color';div2.style.fontSize='12pt';div2.style.cursor='pointer';div2.style.padding='1px';div2.style.paddingRight='10px';div2.style.textAlign='left';var span=document.createElement('SPAN');span.style.display='inline-block';span.style.marginRight='9px';span.style.width='17px';span.style.height='17px';span.style.top='2px';span.style.position='relative';span.style.backgroundColor=colors[i];div2.appendChild(span);div2.innerHTML+=colors[i];div2.onmouseover=function()\n{this.style.backgroundColor='#eee';}\ndiv2.onmouseout=function()\n{this.style.backgroundColor='';}\ndiv2.onclick=function(e)\n{var color=this.childNodes[0].style.backgroundColor;obj.Set('chart.annotate.color',color);}\ndiv.appendChild(div2);}\ndoc.body.appendChild(div);div.style.left=e.pageX+'px';div.style.top=e.pageY+'px';if((e.pageX+(div.offsetWidth+5))>document.body.offsetWidth){div.style.left=(e.pageX-div.offsetWidth)+'px';}\nRGraph.Registry.Set('chart.palette',div);setTimeout(function(){div.style.opacity=0.2;},50);setTimeout(function(){div.style.opacity=0.4;},100);setTimeout(function(){div.style.opacity=0.6;},150);setTimeout(function(){div.style.opacity=0.8;},200);setTimeout(function(){div.style.opacity=1;},250);RGraph.hideContext();window.onclick=function()\n{RG.hidePalette();}\ne.stopPropagation();return false;};RG.clearAnnotations=RG.ClearAnnotations=function(canvas)\n{if(typeof canvas==='string'){var id=canvas;canvas=doc.getElementById(id);}else{var id=canvas.id}\nvar obj=canvas.__object__;if(win.localStorage&&win.localStorage['__rgraph_annotations_'+id+'__']&&win.localStorage['__rgraph_annotations_'+id+'__'].length){win.localStorage['__rgraph_annotations_'+id+'__']=[];RGraph.FireCustomEvent(obj,'onannotateclear');}};RG.replayAnnotations=RG.ReplayAnnotations=function(obj)\n{if(!win.localStorage){return;}\nvar context=obj.context;var annotations=win.localStorage['__rgraph_annotations_'+obj.id+'__'];var i,len,move,coords;context.beginPath();context.lineWidth=obj.Get('annotate.linewidth');if(annotations&&annotations.length){annotations=annotations.split('|');}else{return;}\nfor(i=0,len=annotations.length;i<len;++i){if(annotations[i].match(/[a-z]+/)){context.stroke();context.beginPath();context.strokeStyle=annotations[i];move=true;continue;}\ncoords=annotations[i].split(',');coords[0]=Number(coords[0]);coords[1]=Number(coords[1]);if(move){context.moveTo(coords[0],coords[1]);move=false;}else{context.lineTo(coords[0],coords[1]);}}\ncontext.stroke();};window.addEventListener('load',function(e)\n{setTimeout(function()\n{var tags=doc.getElementsByTagName('canvas');for(var i=0;i<tags.length;++i){if(tags[i].__object__&&tags[i].__object__.isRGraph&&tags[i].__object__.Get('chart.annotatable')){RG.replayAnnotations(tags[i].__object__);}}},100);},false);})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.context.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.contextmenu=RG.Contextmenu=function(obj,menuitems,e)\n{var canvas=obj.canvas;e=RG.FixEventObject(e);RG.FireCustomEvent(obj,'onbeforecontextmenu');if(RG.Registry.Get('chart.contextmenu')){RG.HideContext();}\nRG.HideZoomedCanvas();RG.HidePalette();obj.Set('chart.mousedown',false);var x=e.pageX;var y=e.pageY;var div=document.createElement('div');var bg=document.createElement('div');div.className='RGraph_contextmenu';div.__canvas__=canvas;div.style.position='absolute';div.style.left=0;div.style.top=0;div.style.border='1px solid #666';div.style.backgroundColor='white';div.style.boxShadow='1px 1px 3px #ddd';div.style.MozBoxShadow='1px 1px 3px #ddd';div.style.WebkitBoxShadow='1px 1px 3px #ddd';div.style.opacity=0;bg.className='RGraph_contextmenu_background';bg.style.position='absolute';bg.style.backgroundColor='#ccc';bg.style.borderRight='1px solid #aaa';bg.style.top=0;bg.style.left=0;bg.style.width='18px';bg.style.height='100%';bg.style.opacity=0;div=document.body.appendChild(div);bg=div.appendChild(bg);for(i=0;i<menuitems.length;++i){var menuitem=document.createElement('div');menuitem.__object__=obj;menuitem.__canvas__=canvas;menuitem.__contextmenu__=div;menuitem.className='RGraph_contextmenu_item';if(menuitems[i]){menuitem.style.padding='2px 5px 2px 23px';menuitem.style.fontFamily='Arial';menuitem.style.fontSize='10pt';menuitem.style.textAlign='left';menuitem.style.fontWeight='normal';menuitem.innerHTML=menuitems[i][0];if(RG.is_array(menuitems[i][1])){menuitem.style.backgroundImage='url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAQUlEQVQImY3NoQ2AMABE0ZewABMyGQ6mqWODzlAclBSFO8HZl8uf0FFxCHtwYkt4Y6ChYE44cGH9/fyae2p2LAleW9oVTQuVf6gAAAAASUVORK5CYII=)';menuitem.style.backgroundRepeat='no-repeat';menuitem.style.backgroundPosition='97% center';}\nif(menuitems[i][1]){if(menuitem.addEventListener){menuitem.addEventListener(\"mouseover\",function(e){RG.HideContextSubmenu();e.target.style.backgroundColor='rgba(0,0,0,0.2)';e.target.style.cursor='pointer';},false);menuitem.addEventListener(\"mouseout\",function(e){e.target.style.backgroundColor='inherit';e.target.style.cursor='default';},false);}else{menuitem.attachEvent(\"onmouseover\",function(){RG.HideContextSubmenu();event.srcElement.style.backgroundColor='#eee';event.srcElement.style.cursor='pointer';},false);menuitem.attachEvent(\"onmouseout\",function(){event.srcElement.style.backgroundColor='inherit';event.srcElement.style.cursor='default';},false);}}else{if(menuitem.addEventListener){menuitem.addEventListener(\"mouseover\",function(e){e.target.style.cursor='default';},false);menuitem.addEventListener(\"mouseout\",function(e){e.target.style.cursor='default';},false);}else{menuitem.attachEvent(\"onmouseover\",function(){event.srcElement.style.cursor='default'},false);menuitem.attachEvent(\"onmouseout\",function(){event.srcElement.style.cursor='default';},false);}}}else{menuitem.style.borderBottom='1px solid #ddd';menuitem.style.marginLeft='25px';}\ndiv.appendChild(menuitem);if(menuitems[i]&&menuitems[i][1]&&typeof(menuitems[i][1])=='function'){menuitem.addEventListener('click',menuitems[i][1],false);}else if(menuitems[i]&&menuitems[i][1]&&RG.is_array(menuitems[i][1])){(function()\n{var tmp=menuitems[i][1];menuitem.addEventListener('mouseover',function(e){RG.Contextmenu_submenu(obj,tmp,e.target);},false);})();}}\ndiv.style.width=(div.offsetWidth+10)+'px';div.style.height=(div.offsetHeight-2)+'px';if(x+div.offsetWidth>document.body.offsetWidth){x-=div.offsetWidth;}\ndiv.style.left=x+'px';div.style.top=y+'px';setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu')) obj.style.opacity = 0.2\",50);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu')) obj.style.opacity = 0.4\",100);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu')) obj.style.opacity = 0.6\",150);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu')) obj.style.opacity = 0.8\",200);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu')) obj.style.opacity = 1\",250);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu.bg')) obj.style.opacity = 0.2\",50);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu.bg')) obj.style.opacity = 0.4\",100);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu.bg')) obj.style.opacity = 0.6\",150);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu.bg')) obj.style.opacity = 0.8\",200);setTimeout(\"if (obj = RGraph.Registry.Get('chart.contextmenu.bg')) obj.style.opacity = 1\",250);RG.Registry.Set('chart.contextmenu',div);RG.Registry.Set('chart.contextmenu.bg',bg);RG.Registry.Get('chart.contextmenu').oncontextmenu=function(){return false;};RG.Registry.Get('chart.contextmenu.bg').oncontextmenu=function(){return false;};canvas.addEventListener('click',function(){RG.HideContext();},false);window.addEventListener('click',function()\n{RG.HideContext();},false);window.addEventListener('resize',function()\n{RG.HideContext();},false);if(typeof(obj.getShape)=='function'){RG.Registry.Get('chart.contextmenu').__shape__=obj.getShape(e);}\ne.stopPropagation();RG.FireCustomEvent(obj,'oncontextmenu');return false;};RG.hideContext=RG.HideContext=function()\n{var cm=RG.Registry.Get('chart.contextmenu');var cmbg=RG.Registry.Get('chart.contextmenu.bg');RG.HideContextSubmenu();if(cm){cm.parentNode.removeChild(cm);cmbg.parentNode.removeChild(cmbg);cm.style.visibility='hidden';cm.style.display='none';RG.Registry.Set('chart.contextmenu',null);cmbg.style.visibility='hidden';cmbg.style.display='none';RG.Registry.Set('chart.contextmenu.bg',null);}};RG.hideContextSubmenu=RG.HideContextSubmenu=function()\n{var sub=RG.Registry.Get('chart.contextmenu.submenu');if(sub){sub.style.visibility='none';sub.style.display='none';RG.Registry.Set('chart.contextmenu.submenu',null);}};RG.showContext=RG.ShowContext=function(obj)\n{RG.HidePalette();if(obj.Get('chart.contextmenu')&&obj.Get('chart.contextmenu').length){var isOpera=navigator.userAgent.indexOf('Opera')>=0;var isSafari=navigator.userAgent.indexOf('Safari')>=0;var isChrome=navigator.userAgent.indexOf('Chrome')>=0;var isMacFirefox=navigator.userAgent.indexOf('Firefox')>0&&navigator.userAgent.indexOf('Mac')>0;var isIE9=navigator.userAgent.indexOf('MSIE 9')>=0;if(((!isOpera&&!isSafari)||isChrome)&&!isMacFirefox){obj.canvas.oncontextmenu=function(e)\n{e=RG.FixEventObject(e);if(e.ctrlKey)return true;RG.Contextmenu(obj,obj.Get('chart.contextmenu'),e);return false;}}else{obj.canvas.addEventListener('dblclick',function(e)\n{if(e.ctrlKey)return true;if(!RG.Registry.Get('chart.contextmenu')){RG.Contextmenu(obj,obj.Get('chart.contextmenu'),e);}},false);}}};RG.contextmenu_submenu=RG.Contextmenu_submenu=function(obj,menuitems,parentMenuItem)\n{RG.HideContextSubmenu();var canvas=obj.canvas;var context=obj.context;var menu=parentMenuItem.parentNode;var subMenu=document.createElement('DIV');subMenu.style.position='absolute';subMenu.style.width='100px';subMenu.style.top=menu.offsetTop+parentMenuItem.offsetTop+'px';subMenu.style.left=(menu.offsetLeft+menu.offsetWidth-(RG.ISOLD?9:0))+'px';subMenu.style.backgroundColor='white';subMenu.style.border='1px solid black';subMenu.className='RGraph_contextmenu';subMenu.__contextmenu__=menu;subMenu.style.boxShadow='3px 3px 3px rgba(96,96,96,0.5)';subMenu.style.MozBoxShadow='3px 3px 3px rgba(96,96,96,0.5)';subMenu.style.WebkitBoxShadow='3px 3px 3px rgba(96,96,96,0.5)';subMenu.style.filter='progid:DXImageTransform.Microsoft.Shadow(color=#aaaaaa,direction=135)';document.body.appendChild(subMenu);for(var i=0;i<menuitems.length;++i){var menuitem=document.createElement('DIV');menuitem.__canvas__=canvas;menuitem.__contextmenu__=menu;menuitem.className='RGraph_contextmenu_item';if(menuitems[i]){menuitem.style.padding='2px 5px 2px 23px';menuitem.style.fontFamily='Arial';menuitem.style.fontSize='10pt';menuitem.style.fontWeight='normal';menuitem.style.textAlign='left';menuitem.innerHTML=menuitems[i][0];if(menuitems[i][1]){if(menuitem.addEventListener){menuitem.addEventListener(\"mouseover\",function(e){e.target.style.backgroundColor='rgba(0,0,0,0.2)';e.target.style.cursor='pointer';},false);menuitem.addEventListener(\"mouseout\",function(e){e.target.style.backgroundColor='inherit';e.target.style.cursor='default';},false);}else{menuitem.attachEvent(\"onmouseover\",function(){event.srcElement.style.backgroundColor='rgba(0,0,0,0.2)';event.srcElement.style.cursor='pointer'},false);menuitem.attachEvent(\"onmouseout\",function(){event.srcElement.style.backgroundColor='inherit';event.srcElement.style.cursor='default';},false);}}else{if(menuitem.addEventListener){menuitem.addEventListener(\"mouseover\",function(e){e.target.style.cursor='default';},false);menuitem.addEventListener(\"mouseout\",function(e){e.target.style.cursor='default';},false);}else{menuitem.attachEvent(\"onmouseover\",function(){event.srcElement.style.cursor='default'},false);menuitem.attachEvent(\"onmouseout\",function(){event.srcElement.style.cursor='default';},false);}}}else{menuitem.style.borderBottom='1px solid #ddd';menuitem.style.marginLeft='25px';}\nsubMenu.appendChild(menuitem);if(menuitems[i]&&menuitems[i][1]){if(document.all){menuitem.attachEvent('onclick',menuitems[i][1]);}else{menuitem.addEventListener('click',menuitems[i][1],false);}}}\nvar bg=document.createElement('DIV');bg.className='RGraph_contextmenu_background';bg.style.position='absolute';bg.style.backgroundColor='#ccc';bg.style.borderRight='1px solid #aaa';bg.style.top=0;bg.style.left=0;bg.style.width='18px';bg.style.height='100%';bg=subMenu.appendChild(bg);RG.Registry.Set('chart.contextmenu.submenu',subMenu);};RG.showPNG=function()\n{if(RG.ISIE8){alert('[RGRAPH PNG] Sorry, showing a PNG is not supported on MSIE8.');return;}\nif(arguments[0]&&arguments[0].id){var canvas=arguments[0];var event=arguments[1];}else if(RG.Registry.Get('chart.contextmenu')){var canvas=RG.Registry.Get('chart.contextmenu').__canvas__;}else{alert('[RGRAPH SHOWPNG] Could not find canvas!');}\nvar obj=canvas.__object__;var bg=document.createElement('DIV');bg.id='__rgraph_image_bg__';bg.style.position='fixed';bg.style.top='-10px';bg.style.left='-10px';bg.style.width='5000px';bg.style.height='5000px';bg.style.backgroundColor='rgb(204,204,204)';bg.style.opacity=0;document.body.appendChild(bg);var div=document.createElement('DIV');div.style.backgroundColor='white';div.style.opacity=0;div.style.border='1px solid black';div.style.position='fixed';div.style.top='20%';div.style.width=canvas.width+'px';div.style.height=canvas.height+35+'px';div.style.left=(document.body.clientWidth/2)-(canvas.width/2)+'px';div.style.padding='5px';div.style.borderRadius='10px';div.style.MozBorderRadius='10px';div.style.WebkitBorderRadius='10px';div.style.boxShadow='0 0 15px rgba(96,96,96,0.5)';div.style.MozBoxShadow='0 0 15px rgba(96,96,96,0.5)';div.style.WebkitBoxShadow='rgba(96,96,96,0.5) 0 0 15px';div.__canvas__=canvas;div.__object__=obj;div.id='__rgraph_image_div__';document.body.appendChild(div);div.innerHTML+='<div style=\"position: absolute; margin-left: 10px; top: '+canvas.height+'px; width: '+(canvas.width-50)+'px; height: 25px\"><span style=\"font-size: 12pt;display: inline; display: inline-block; width: 65px; text-align: right\">URL:</span><textarea style=\"float: right; overflow: hidden; height: 20px; width: '+(canvas.width-obj.gutterLeft-obj.gutterRight-80)+'px\" onclick=\"this.select()\" readonly=\"readonly\" id=\"__rgraph_dataurl__\">'+canvas.toDataURL()+'</textarea></div>';div.innerHTML+='<div style=\"position: absolute; top: '+(canvas.height+25)+'px; left: '+(obj.gutterLeft-65+(canvas.width/2))+'px; width: '+(canvas.width-obj.gutterRight)+'px; font-size: 65%\">A link using the URL: <a href=\"'+canvas.toDataURL()+'\">View</a></div>'\nvar img=document.createElement('IMG');RG.Registry.Set('chart.png',img);img.__canvas__=canvas;img.__object__=obj;img.id='__rgraph_image_img__';img.className='RGraph_png';img.src=canvas.toDataURL();div.appendChild(img);setTimeout(function(){document.getElementById(\"__rgraph_dataurl__\").select();},50);window.addEventListener('resize',function(e){var img=RG.Registry.Get('chart.png');img.style.left=(document.body.clientWidth/2)-(img.width/2)+'px';},false);bg.onclick=function(e)\n{var div=document.getElementById(\"__rgraph_image_div__\");var bg=document.getElementById(\"__rgraph_image_bg__\");if(div){div.style.opacity=0;div.parentNode.removeChild(div);div.id='';div.style.display='none';div=null;}\nif(bg){bg.style.opacity=0;bg.id='';bg.style.display='none';bg=null;}}\nwindow.addEventListener('resize',function(e){bg.onclick(e);},false)\nRG.showpng_image_bg=bg;RG.showpng_image_div=div;setTimeout('RGraph.showpng_image_div.style.opacity = 0.2',50);setTimeout('RGraph.showpng_image_div.style.opacity = 0.4',100);setTimeout('RGraph.showpng_image_div.style.opacity = 0.6',150);setTimeout('RGraph.showpng_image_div.style.opacity = 0.8',200);setTimeout('RGraph.showpng_image_div.style.opacity = 1',250);setTimeout('RGraph.showpng_image_bg.style.opacity = 0.1',50);setTimeout('RGraph.showpng_image_bg.style.opacity = 0.2',100);setTimeout('RGraph.showpng_image_bg.style.opacity = 0.3',150);setTimeout('RGraph.showpng_image_bg.style.opacity = 0.4',200);setTimeout('RGraph.showpng_image_bg.style.opacity = 0.5',250);img.onclick=function(e)\n{if(e.stopPropagation)e.stopPropagation();else event.cancelBubble=true;}\nif(event&&event.stopPropagation){event.stopPropagation();}};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.core.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.Highlight={};RG.Registry={};RG.Registry.store=[];RG.Registry.store['chart.event.handlers']=[];RG.Registry.store['__rgraph_event_listeners__']=[];RG.Background={};RG.background={};RG.objects=[];RG.Resizing={};RG.events=[];RG.cursor=[];RG.Effects=RG.Effects||{};RG.cache=[];RG.ObjectRegistry={};RG.ObjectRegistry.objects={};RG.ObjectRegistry.objects.byUID=[];RG.ObjectRegistry.objects.byCanvasID=[];RG.OR=RG.ObjectRegistry;RG.PI=ma.PI;RG.HALFPI=RG.PI/2;RG.TWOPI=RG.PI*2;RG.ISFF=ua.indexOf('Firefox')!=-1;RG.ISOPERA=ua.indexOf('Opera')!=-1;RG.ISCHROME=ua.indexOf('Chrome')!=-1;RG.ISSAFARI=ua.indexOf('Safari')!=-1&&!RG.ISCHROME;RG.ISWEBKIT=ua.indexOf('WebKit')!=-1;RG.ISIE=ua.indexOf('Trident')>0||navigator.userAgent.indexOf('MSIE')>0;RG.ISIE6=ua.indexOf('MSIE 6')>0;RG.ISIE7=ua.indexOf('MSIE 7')>0;RG.ISIE8=ua.indexOf('MSIE 8')>0;RG.ISIE9=ua.indexOf('MSIE 9')>0;RG.ISIE10=ua.indexOf('MSIE 10')>0;RG.ISOLD=RGraph.ISIE6||RGraph.ISIE7||RGraph.ISIE8;RG.ISIE11UP=ua.indexOf('MSIE')==-1&&ua.indexOf('Trident')>0;RG.ISIE10UP=RG.ISIE10||RG.ISIE11UP;RG.ISIE9UP=RG.ISIE9||RG.ISIE10UP;RG.getScale=function(max,obj)\n{if(max==0){return['0.2','0.4','0.6','0.8','1.0'];}\nvar original_max=max;if(max<=1){if(max>0.5){return[0.2,0.4,0.6,0.8,Number(1).toFixed(1)];}else if(max>=0.1){return obj.Get('chart.scale.round')?[0.2,0.4,0.6,0.8,1]:[0.1,0.2,0.3,0.4,0.5];}else{var tmp=max;var exp=0;while(tmp<1.01){exp+=1;tmp*=10;}\nvar ret=['2e-'+exp,'4e-'+exp,'6e-'+exp,'8e-'+exp,'10e-'+exp];if(max<=('5e-'+exp)){ret=['1e-'+exp,'2e-'+exp,'3e-'+exp,'4e-'+exp,'5e-'+exp];}\nreturn ret;}}\nif(String(max).indexOf('.')>0){max=String(max).replace(/\\.\\d+$/,'');}\nvar interval=ma.pow(10,Number(String(Number(max)).length-1));var topValue=interval;while(topValue<max){topValue+=(interval/2);}\nif(Number(original_max)>Number(topValue)){topValue+=(interval/2);}\nif(max<10){topValue=(Number(original_max)<=5?5:10);}\nif(obj&&typeof(obj.Get('chart.scale.round'))=='boolean'&&obj.Get('chart.scale.round')){topValue=10*interval;}\nreturn[topValue*0.2,topValue*0.4,topValue*0.6,topValue*0.8,topValue];};RG.getScale2=function(obj,opt)\n{var ca=obj.canvas,co=obj.context,prop=obj.properties,numlabels=typeof opt['ylabels.count']=='number'?opt['ylabels.count']:5,units_pre=typeof opt['units.pre']=='string'?opt['units.pre']:'',units_post=typeof opt['units.post']=='string'?opt['units.post']:'',max=Number(opt['max']),min=typeof opt['min']=='number'?opt['min']:0,strict=opt['strict'],decimals=Number(opt['scale.decimals']),point=opt['scale.point'],thousand=opt['scale.thousand'],original_max=max,round=opt['scale.round'],scale={max:1,labels:[],values:[]}\nif(!max){var max=1;for(var i=0;i<numlabels;++i){var label=((((max-min)/numlabels)+min)*(i+1)).toFixed(decimals);scale.labels.push(units_pre+label+units_post);scale.values.push(parseFloat(label))}}else if(max<=1&&!strict){var arr=[1,0.5,0.10,0.05,0.010,0.005,0.0010,0.0005,0.00010,0.00005,0.000010,0.000005,0.0000010,0.0000005,0.00000010,0.00000005,0.000000010,0.000000005,0.0000000010,0.0000000005,0.00000000010,0.00000000005,0.000000000010,0.000000000005,0.0000000000010,0.0000000000005],vals=[];for(var i=0;i<arr.length;++i){if(max>arr[i]){i--;break;}}\nscale.max=arr[i]\nscale.labels=[];scale.values=[];for(var j=0;j<numlabels;++j){var value=((((arr[i]-min)/numlabels)*(j+1))+min).toFixed(decimals);scale.values.push(value);scale.labels.push(RG.numberFormat(obj,value,units_pre,units_post));}}else if(!strict){max=ma.ceil(max);var interval=ma.pow(10,ma.max(1,Number(String(Number(max)-Number(min)).length-1)));var topValue=interval;while(topValue<max){topValue+=(interval/2);}\nif(Number(original_max)>Number(topValue)){topValue+=(interval/2);}\nif(max<=10){topValue=(Number(original_max)<=5?5:10);}\nif(obj&&typeof(round)=='boolean'&&round){topValue=10*interval;}\nscale.max=topValue;var tmp_point=prop['chart.scale.point'];var tmp_thousand=prop['chart.scale.thousand'];obj.Set('chart.scale.thousand',thousand);obj.Set('chart.scale.point',point);for(var i=0;i<numlabels;++i){scale.labels.push(RG.number_format(obj,((((i+1)/numlabels)*(topValue-min))+min).toFixed(decimals),units_pre,units_post));scale.values.push(((((i+1)/numlabels)*(topValue-min))+min).toFixed(decimals));}\nobj.Set('chart.scale.thousand',tmp_thousand);obj.Set('chart.scale.point',tmp_point);}else if(typeof(max)=='number'&&strict){for(var i=0;i<numlabels;++i){scale.labels.push(RG.numberFormat(obj,((((i+1)/numlabels)*(max-min))+min).toFixed(decimals),units_pre,units_post));scale.values.push(((((i+1)/numlabels)*(max-min))+min).toFixed(decimals));}\nscale.max=max;}\nscale.units_pre=units_pre;scale.units_post=units_post;scale.point=point;scale.decimals=decimals;scale.thousand=thousand;scale.numlabels=numlabels;scale.round=Boolean(round);scale.min=min;for(var i=0;i<scale.values.length;++i){scale.values[i]=parseFloat(scale.values[i]);}\nreturn scale;};RG.parseJSONGradient=function(opt)\n{var obj=opt.object,def=opt.def,co=opt.object.context;def=eval(\"(\"+def+\")\");if(typeof def.r1==='number'&&typeof def.r2==='number'){var grad=co.createRadialGradient(def.x1,def.y1,def.r1,def.x2,def.y2,def.r2);}else{var grad=co.createLinearGradient(def.x1,def.y1,def.x2,def.y2);}\nvar diff=1/(def.colors.length-1);grad.addColorStop(0,RG.trim(def.colors[0]));for(var j=1,len=def.colors.length;j<len;++j){grad.addColorStop(j*diff,RGraph.trim(def.colors[j]));}\nreturn grad;};RG.arrayInvert=function(arr)\n{for(var i=0,len=arr.length;i<len;++i){arr[i]=!arr[i];}\nreturn arr;};RG.arrayTrim=function(arr)\n{var out=[],content=false;for(var i=0;i<arr.length;i++){if(arr[i]){content=true;}\nif(content){out.push(arr[i]);}}\nout=RG.arrayReverse(out);var out2=[],content=false;for(var i=0;i<out.length;i++){if(out[i]){content=true;}\nif(content){out2.push(out[i]);}}\nout2=RG.arrayReverse(out2);return out2;};RG.arrayClone=RG.array_clone=function(obj)\n{if(obj===null||typeof obj!=='object'){return obj;}\nvar temp=RG.isArray(obj)?[]:{};for(var i in obj){if(typeof i==='string'||typeof i==='number'){if(typeof obj[i]==='number'){temp[i]=(function(arg){return Number(arg);})(obj[i]);}else if(typeof obj[i]==='string'){temp[i]=(function(arg){return String(arg);})(obj[i]);}else if(typeof obj[i]==='function'){temp[i]=obj[i];}else{temp[i]=RG.arrayClone(obj[i]);}}}\nreturn temp;};RG.arrayMax=RG.array_max=function(arr)\n{var max=null,ma=Math\nif(typeof arr==='number'){return arr;}\nif(RG.isNull(arr)){return 0;}\nfor(var i=0,len=arr.length;i<len;++i){if(typeof arr[i]==='number'&&!isNaN(arr[i])){var val=arguments[1]?ma.abs(arr[i]):arr[i];if(typeof max==='number'){max=ma.max(max,val);}else{max=val;}}}\nreturn max;};RG.arrayMin=function(arr)\n{var max=null,min=null,ma=Math;if(typeof arr==='number'){return arr;}\nif(RG.isNull(arr)){return 0;}\nfor(var i=0,len=arr.length;i<len;++i){if(typeof arr[i]==='number'){var val=arguments[1]?ma.abs(arr[i]):arr[i];if(typeof min==='number'){min=ma.min(min,val);}else{min=val;}}}\nreturn min;};RG.arrayPad=RG.array_pad=function(arr,len)\n{if(arr.length<len){var val=arguments[2]?arguments[2]:null;for(var i=arr.length;i<len;i+=1){arr[i]=val;}}\nreturn arr;};RG.arraySum=RG.array_sum=function(arr)\n{if(typeof arr==='number'){return arr;}\nif(RG.isNull(arr)){return 0;}\nvar i,sum,len=arr.length;for(i=0,sum=0;i<len;sum+=(arr[i++]||0));return sum;};RG.arrayLinearize=RG.array_linearize=function()\n{var arr=[],args=arguments\nfor(var i=0,len=args.length;i<len;++i){if(typeof args[i]==='object'&&args[i]){for(var j=0,len2=args[i].length;j<len2;++j){var sub=RG.array_linearize(args[i][j]);for(var k=0,len3=sub.length;k<len3;++k){arr.push(sub[k]);}}}else{arr.push(args[i]);}}\nreturn arr;};RG.arrayShift=RG.array_shift=function(arr)\n{var ret=[];for(var i=1,len=arr.length;i<len;++i){ret.push(arr[i]);}\nreturn ret;};RG.arrayReverse=RG.array_reverse=function(arr)\n{if(!arr){return;}\nvar newarr=[];for(var i=arr.length-1;i>=0;i-=1){newarr.push(arr[i]);}\nreturn newarr;};RG.abs=function(value)\n{if(typeof value==='string'){value=parseFloat(value)||0;}\nif(typeof value==='number'){return ma.abs(value);}\nif(typeof value==='object'){for(i in value){if(typeof i==='string'||typeof i==='number'||typeof i==='object'){value[i]=RG.abs(value[i]);}}\nreturn value;}\nreturn 0;};RG.clear=RG.Clear=function(ca)\n{var obj=ca.__object__,co=ca.getContext('2d'),color=arguments[1]||(obj&&obj.get('clearto'))\nif(!ca){return;}\nRG.fireCustomEvent(obj,'onbeforeclear');if(RG.text2.domNodeCache&&RG.text2.domNodeCache[ca.id]){for(var i in RG.text2.domNodeCache[ca.id]){var el=RG.text2.domNodeCache[ca.id][i];if(el&&el.style){el.style.display='none';}}}\nif(!color||(color&&color==='rgba(0,0,0,0)'||color==='transparent')){co.clearRect(-100,-100,ca.width+200,ca.height+200);co.globalCompositeOperation='source-over';}else if(color){RG.path2(co,'fs % fr -100 -100 % %',color,ca.width+200,ca.height+200);}else{RG.path2(co,'fs % fr -100 -100 % %',obj.get('clearto'),ca.width+200,ca.height+200);}\nif(RG.Registry.Get('chart.background.image.'+ca.id)){var img=RG.Registry.Get('chart.background.image.'+ca.id);img.style.position='absolute';img.style.left='-10000px';img.style.top='-10000px';}\nif(RG.Registry.Get('chart.tooltip')&&obj&&!obj.get('chart.tooltips.nohideonclear')){RG.HideTooltip(ca);}\nca.style.cursor='default';RG.FireCustomEvent(obj,'onclear');};RG.drawTitle=RG.DrawTitle=function(obj,text,gutterTop)\n{var ca=canvas=obj.canvas,co=context=obj.context,prop=obj.properties\ngutterLeft=prop['chart.gutter.left'],gutterRight=prop['chart.gutter.right'],gutterTop=gutterTop,gutterBottom=prop['chart.gutter.bottom'],size=arguments[4]?arguments[4]:12,bold=prop['chart.title.bold'],italic=prop['chart.title.italic'],centerx=(arguments[3]?arguments[3]:((ca.width-gutterLeft-gutterRight)/2)+gutterLeft),keypos=prop['chart.key.position'],vpos=prop['chart.title.vpos'],hpos=prop['chart.title.hpos'],bgcolor=prop['chart.title.background'],x=prop['chart.title.x'],y=prop['chart.title.y'],halign='center',valign='center'\nif(obj.type=='bar'&&prop['chart.variant']=='3d'){keypos='gutter';}\nco.beginPath();co.fillStyle=prop['chart.text.color']?prop['chart.text.color']:'black';if(keypos&&keypos!='gutter'){var valign='center';}else if(!keypos){var valign='center';}else{var valign='bottom';}\nif(typeof prop['chart.title.vpos']==='number'){vpos=prop['chart.title.vpos']*gutterTop;if(prop['chart.xaxispos']==='top'){vpos=prop['chart.title.vpos']*gutterBottom+gutterTop+(ca.height-gutterTop-gutterBottom);}}else{vpos=gutterTop-size-5;if(prop['chart.xaxispos']==='top'){vpos=ca.height-gutterBottom+size+5;}}\nif(typeof hpos==='number'){centerx=hpos*ca.width;}\nif(typeof x==='number')centerx=x;if(typeof y==='number')vpos=y;if(typeof x==='string')centerx+=parseFloat(x);if(typeof y==='string')vpos+=parseFloat(y);if(typeof prop['chart.title.halign']==='string'){halign=prop['chart.title.halign'];}\nif(typeof prop['chart.title.valign']==='string'){valign=prop['chart.title.valign'];}\nif(typeof prop['chart.title.color']!==null){var oldColor=co.fillStyle\nvar newColor=prop['chart.title.color'];co.fillStyle=newColor?newColor:'black';}\nvar font=prop['chart.text.font'];if(typeof prop['chart.title.font']==='string'){font=prop['chart.title.font'];}\nvar ret=RG.text2(obj,{font:font,size:size,x:centerx,y:vpos,text:text,valign:valign,halign:halign,bounding:bgcolor!=null,'bounding.fill':bgcolor,'bold':bold,italic:italic,tag:'title',marker:false});co.fillStyle=oldColor;};RG.getMouseXY=function(e)\n{if(!e.target){return;}\nvar el=e.target;var ca=el;var caStyle=ca.style;var offsetX=0;var offsetY=0;var x;var y;var borderLeft=parseInt(caStyle.borderLeftWidth)||0;var borderTop=parseInt(caStyle.borderTopWidth)||0;var paddingLeft=parseInt(caStyle.paddingLeft)||0\nvar paddingTop=parseInt(caStyle.paddingTop)||0\nvar additionalX=borderLeft+paddingLeft;var additionalY=borderTop+paddingTop;if(typeof e.offsetX==='number'&&typeof e.offsetY==='number'){if(!RG.ISIE&&!RG.ISOPERA){x=e.offsetX-borderLeft-paddingLeft;y=e.offsetY-borderTop-paddingTop;}else if(RG.ISIE){x=e.offsetX-paddingLeft;y=e.offsetY-paddingTop;}else{x=e.offsetX;y=e.offsetY;}}else{if(typeof el.offsetParent!=='undefined'){do{offsetX+=el.offsetLeft;offsetY+=el.offsetTop;}while((el=el.offsetParent));}\nx=e.pageX-offsetX-additionalX;y=e.pageY-offsetY-additionalY;x-=(2*(parseInt(document.body.style.borderLeftWidth)||0));y-=(2*(parseInt(document.body.style.borderTopWidth)||0));}\nreturn[x,y];};RG.getCanvasXY=function(canvas)\n{var x=0;var y=0;var el=canvas;do{x+=el.offsetLeft;y+=el.offsetTop;if(el.tagName.toLowerCase()=='table'&&(RG.ISCHROME||RG.ISSAFARI)){x+=parseInt(el.border)||0;y+=parseInt(el.border)||0;}\nel=el.offsetParent;}while(el&&el.tagName.toLowerCase()!='body');var paddingLeft=canvas.style.paddingLeft?parseInt(canvas.style.paddingLeft):0;var paddingTop=canvas.style.paddingTop?parseInt(canvas.style.paddingTop):0;var borderLeft=canvas.style.borderLeftWidth?parseInt(canvas.style.borderLeftWidth):0;var borderTop=canvas.style.borderTopWidth?parseInt(canvas.style.borderTopWidth):0;if(navigator.userAgent.indexOf('Firefox')>0){x+=parseInt(document.body.style.borderLeftWidth)||0;y+=parseInt(document.body.style.borderTopWidth)||0;}\nreturn[x+paddingLeft+borderLeft,y+paddingTop+borderTop];};RG.isFixed=function(canvas)\n{var obj=canvas;var i=0;while(obj&&obj.tagName.toLowerCase()!='body'&&i<99){if(obj.style.position=='fixed'){return obj;}\nobj=obj.offsetParent;}\nreturn false;};RG.register=RG.Register=function(obj)\n{if(!obj.Get('chart.noregister')){RGraph.ObjectRegistry.Add(obj);obj.Set('chart.noregister',true);}};RG.redraw=RG.Redraw=function()\n{var objectRegistry=RGraph.ObjectRegistry.objects.byCanvasID;var tags=document.getElementsByTagName('canvas');for(var i=0,len=tags.length;i<len;++i){if(tags[i].__object__&&tags[i].__object__.isRGraph){if(!tags[i].noclear){RGraph.clear(tags[i],arguments[0]?arguments[0]:null);}}}\nfor(var i=0,len=objectRegistry.length;i<len;++i){if(objectRegistry[i]){var id=objectRegistry[i][0];objectRegistry[i][1].Draw();}}};RG.redrawCanvas=RG.RedrawCanvas=function(ca)\n{var objects=RG.ObjectRegistry.getObjectsByCanvasID(ca.id);if(!arguments[1]||(typeof arguments[1]==='boolean'&&!arguments[1]==false)){var color=arguments[2]||ca.__object__.get('clearto')||'transparent';RG.clear(ca,color);}\nfor(var i=0,len=objects.length;i<len;++i){if(objects[i]){if(objects[i]&&objects[i].isRGraph){objects[i].Draw();}}}};RG.Background.draw=RG.background.draw=RG.background.Draw=function(obj)\n{var ca=obj.canvas,co=obj.context,prop=obj.properties,height=0,gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,variant=prop['chart.variant']\nco.fillStyle=prop['chart.text.color'];if(variant=='3d'){co.save();co.translate(prop['chart.variant.threed.offsetx'],-1*prop['chart.variant.threed.offsety']);}\nif(typeof prop['chart.title.xaxis']==='string'&&prop['chart.title.xaxis'].length){var size=prop['chart.text.size']+2;var font=prop['chart.text.font'];var bold=prop['chart.title.xaxis.bold'];if(typeof(prop['chart.title.xaxis.size'])=='number'){size=prop['chart.title.xaxis.size'];}\nif(typeof(prop['chart.title.xaxis.font'])=='string'){font=prop['chart.title.xaxis.font'];}\nvar hpos=((ca.width-gutterLeft-gutterRight)/2)+gutterLeft;var vpos=ca.height-gutterBottom+25;if(typeof prop['chart.title.xaxis.pos']==='number'){vpos=ca.height-(gutterBottom*prop['chart.title.xaxis.pos']);}\nif(typeof prop['chart.title.xaxis.x']==='number'){hpos=prop['chart.title.xaxis.x'];}\nif(typeof prop['chart.title.xaxis.y']==='number'){vpos=prop['chart.title.xaxis.y'];}\nRG.text2(prop['chart.text.accessible']?obj.context:co,{font:font,size:size,x:hpos,y:vpos,text:prop['chart.title.xaxis'],halign:'center',valign:'center',bold:bold,color:prop['chart.title.xaxis.color']||'black',tag:'title xaxis'});}\nif(typeof(prop['chart.title.yaxis'])=='string'&&prop['chart.title.yaxis'].length){var size=prop['chart.text.size']+2;var font=prop['chart.text.font'];var angle=270;var bold=prop['chart.title.yaxis.bold'];var color=prop['chart.title.yaxis.color'];if(typeof(prop['chart.title.yaxis.pos'])=='number'){var yaxis_title_pos=prop['chart.title.yaxis.pos']*gutterLeft;}else{var yaxis_title_pos=((gutterLeft-25)/gutterLeft)*gutterLeft;}\nif(typeof prop['chart.title.yaxis.size']==='number'){size=prop['chart.title.yaxis.size'];}\nif(typeof prop['chart.title.yaxis.font']==='string'){font=prop['chart.title.yaxis.font'];}\nif(prop['chart.title.yaxis.align']=='right'||prop['chart.title.yaxis.position']=='right'||(obj.type==='hbar'&&prop['chart.yaxispos']==='right'&&typeof prop['chart.title.yaxis.align']==='undefined'&&typeof prop['chart.title.yaxis.position']==='undefined')){angle=90;yaxis_title_pos=prop['chart.title.yaxis.pos']?(ca.width-gutterRight)+(prop['chart.title.yaxis.pos']*gutterRight):ca.width-gutterRight+prop['chart.text.size']+5;}else{yaxis_title_pos=yaxis_title_pos;}\nvar y=((ca.height-gutterTop-gutterBottom)/2)+gutterTop;if(typeof prop['chart.title.yaxis.x']==='number'){yaxis_title_pos=prop['chart.title.yaxis.x'];}\nif(typeof prop['chart.title.yaxis.y']==='number'){y=prop['chart.title.yaxis.y'];}\nco.fillStyle=color;RG.text2(prop['chart.text.accessible']?obj.context:co,{'font':font,'size':size,'x':yaxis_title_pos,'y':y,'valign':'center','halign':'center','angle':angle,'bold':bold,'text':prop['chart.title.yaxis'],'tag':'title yaxis',accessible:false});}\nvar bgcolor=prop['chart.background.color'];if(bgcolor){co.fillStyle=bgcolor;co.fillRect(gutterLeft+0.5,gutterTop+0.5,ca.width-gutterLeft-gutterRight,ca.height-gutterTop-gutterBottom);}\nvar numbars=(prop['chart.ylabels.count']||5);if(typeof prop['chart.background.barcount']==='number'){numbars=prop['chart.background.barcount'];}\nbarHeight=(ca.height-gutterBottom-gutterTop)/numbars;co.beginPath();co.fillStyle=prop['chart.background.barcolor1'];co.strokeStyle=co.fillStyle;height=(ca.height-gutterBottom);for(var i=0;i<numbars;i+=2){co.rect(gutterLeft,(i*barHeight)+gutterTop,ca.width-gutterLeft-gutterRight,barHeight);}\nco.fill();co.beginPath();co.fillStyle=prop['chart.background.barcolor2'];co.strokeStyle=co.fillStyle;for(var i=1;i<numbars;i+=2){co.rect(gutterLeft,(i*barHeight)+gutterTop,ca.width-gutterLeft-gutterRight,barHeight);}\nco.fill();co.beginPath();var func=function(obj,cacheCanvas,cacheContext)\n{if(prop['chart.background.grid']){prop['chart.background.grid.autofit.numhlines']+=0.0001;if(prop['chart.background.grid.autofit']){if(prop['chart.background.grid.autofit.align']){if(obj.type==='hbar'){obj.set('chart.background.grid.autofit.numhlines',obj.data.length);}\nif(obj.type==='line'){if(typeof prop['chart.background.grid.autofit.numvlines']==='number'){}else if(prop['chart.labels']&&prop['chart.labels'].length){obj.Set('chart.background.grid.autofit.numvlines',prop['chart.labels'].length-1);}else{obj.Set('chart.background.grid.autofit.numvlines',obj.data[0].length-1);}}else if(obj.type==='waterfall'){obj.set('backgroundGridAutofitNumvlines',obj.data.length+(prop['chart.total']?1:0));}else if((obj.type==='bar'||obj.type==='scatter')&&((prop['chart.labels']&&prop['chart.labels'].length)||obj.type==='bar')){var len=(prop['chart.labels']&&prop['chart.labels'].length)||obj.data.length;obj.set({backgroundGridAutofitNumvlines:len});}else if(obj.type==='gantt'){if(typeof obj.get('chart.background.grid.autofit.numvlines')==='number'){}else{obj.set('chart.background.grid.autofit.numvlines',prop['chart.xmax']);}\nobj.set('chart.background.grid.autofit.numhlines',obj.data.length);}else if(obj.type==='hbar'&&RG.isNull(prop['chart.background.grid.autofit.numhlines'])){obj.set('chart.background.grid.autofit.numhlines',obj.data.length);}}\nvar vsize=((cacheCanvas.width-gutterLeft-gutterRight))/prop['chart.background.grid.autofit.numvlines'];var hsize=(cacheCanvas.height-gutterTop-gutterBottom)/prop['chart.background.grid.autofit.numhlines'];obj.Set('chart.background.grid.vsize',vsize);obj.Set('chart.background.grid.hsize',hsize);}\nco.beginPath();cacheContext.lineWidth=prop['chart.background.grid.width']?prop['chart.background.grid.width']:1;cacheContext.strokeStyle=prop['chart.background.grid.color'];if(prop['chart.background.grid.dashed']&&typeof cacheContext.setLineDash=='function'){cacheContext.setLineDash([3,5]);}\nif(prop['chart.background.grid.dotted']&&typeof cacheContext.setLineDash=='function'){cacheContext.setLineDash([1,3]);}\nco.beginPath();if(prop['chart.background.grid.hlines']){height=(cacheCanvas.height-gutterBottom)\nvar hsize=prop['chart.background.grid.hsize'];for(y=gutterTop;y<=height;y+=hsize){cacheContext.moveTo(gutterLeft,ma.round(y));cacheContext.lineTo(ca.width-gutterRight,ma.round(y));}}\nif(prop['chart.background.grid.vlines']){var width=(cacheCanvas.width-gutterRight);var vsize=prop['chart.background.grid.vsize'];for(x=gutterLeft;ma.round(x)<=width;x+=vsize){cacheContext.moveTo(ma.round(x),gutterTop);cacheContext.lineTo(ma.round(x),ca.height-gutterBottom);}}\nif(prop['chart.background.grid.border']){cacheContext.strokeStyle=prop['chart.background.grid.color'];cacheContext.strokeRect(ma.round(gutterLeft),ma.round(gutterTop),ca.width-gutterLeft-gutterRight,ca.height-gutterTop-gutterBottom);}}\ncacheContext.stroke();cacheContext.beginPath();cacheContext.closePath();}\nRG.cachedDraw(obj,obj.uid+'_background',func);if(variant=='3d'){co.restore();}\nif(typeof co.setLineDash=='function'){co.setLineDash([1,0]);}\nco.stroke();if(typeof(obj.properties['chart.title'])=='string'){var prop=obj.properties;RG.drawTitle(obj,prop['chart.title'],obj.gutterTop,null,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2,obj);}};RG.numberFormat=RG.number_format=function(obj,num)\n{var ca=obj.canvas;var co=obj.context;var prop=obj.properties;var i;var prepend=arguments[2]?String(arguments[2]):'';var append=arguments[3]?String(arguments[3]):'';var output='';var decimal='';var decimal_seperator=typeof prop['chart.scale.point']=='string'?prop['chart.scale.point']:'.';var thousand_seperator=typeof prop['chart.scale.thousand']=='string'?prop['chart.scale.thousand']:',';RegExp.$1='';var i,j;if(typeof prop['chart.scale.formatter']==='function'){return prop['chart.scale.formatter'](obj,num);}\nif(String(num).indexOf('e')>0){return String(prepend+String(num)+append);}\nnum=String(num);if(num.indexOf('.')>0){var tmp=num;num=num.replace(/\\.(.*)/,'');decimal=tmp.replace(/(.*)\\.(.*)/,'$2');}\nvar seperator=thousand_seperator;var foundPoint;for(i=(num.length-1),j=0;i>=0;j++,i--){var character=num.charAt(i);if(j%3==0&&j!=0){output+=seperator;}\noutput+=character;}\nvar rev=output;output='';for(i=(rev.length-1);i>=0;i--){output+=rev.charAt(i);}\nif(output.indexOf('-'+prop['chart.scale.thousand'])==0){output='-'+output.substr(('-'+prop['chart.scale.thousand']).length);}\nif(decimal.length){output=output+decimal_seperator+decimal;decimal='';RegExp.$1='';}\nif(output.charAt(0)=='-'){output=output.replace(/-/,'');prepend='-'+prepend;}\nreturn prepend+output+append;};RG.drawBars=RG.DrawBars=function(obj)\n{var prop=obj.properties;var co=obj.context;var ca=obj.canvas;var hbars=prop['chart.background.hbars'];if(hbars===null){return;}\nco.beginPath();for(var i=0,len=hbars.length;i<len;++i){var start=hbars[i][0];var length=hbars[i][1];var color=hbars[i][2];if(RG.is_null(start))start=obj.scale2.max\nif(start>obj.scale2.max)start=obj.scale2.max;if(RG.is_null(length))length=obj.scale2.max-start;if(start+length>obj.scale2.max)length=obj.scale2.max-start;if(start+length<(-1*obj.scale2.max))length=(-1*obj.scale2.max)-start;if(prop['chart.xaxispos']=='center'&&start==obj.scale2.max&&length<(obj.scale2.max* -2)){length=obj.scale2.max* -2;}\nvar x=prop['chart.gutter.left'];var y=obj.getYCoord(start);var w=ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'];var h=obj.getYCoord(start+length)-y;if(RG.ISOPERA!=-1&&prop['chart.xaxispos']=='center'&&h<0){h*=-1;y=y-h;}\nif(prop['chart.xaxispos']=='top'){y=ca.height-y;h*=-1;}\nco.fillStyle=color;co.fillRect(x,y,w,h);}};RG.drawInGraphLabels=RG.DrawInGraphLabels=function(obj)\n{var ca=obj.canvas,co=obj.context,prop=obj.properties,labels=prop['chart.labels.ingraph'],labels_processed=[];var fgcolor='black',bgcolor='white',direction=1;if(!labels){return;}\nfor(var i=0,len=labels.length;i<len;i+=1){if(typeof labels[i]==='number'){for(var j=0;j<labels[i];++j){labels_processed.push(null);}}else if(typeof labels[i]==='string'||typeof labels[i]==='object'){labels_processed.push(labels[i]);}else{labels_processed.push('');}}\nRG.noShadow(obj);if(labels_processed&&labels_processed.length>0){for(var i=0,len=labels_processed.length;i<len;i+=1){if(labels_processed[i]){var coords=obj.coords[i];if(coords&&coords.length>0){var x=(obj.type=='bar'?coords[0]+(coords[2]/2):coords[0]);var y=(obj.type=='bar'?coords[1]+(coords[3]/2):coords[1]);var length=typeof labels_processed[i][4]==='number'?labels_processed[i][4]:25;co.beginPath();co.fillStyle='black';co.strokeStyle='black';if(obj.type==='bar'){if(obj.Get('chart.xaxispos')=='top'){length*=-1;}\nif(prop['chart.variant']=='dot'){co.moveTo(ma.round(x),obj.coords[i][1]-5);co.lineTo(ma.round(x),obj.coords[i][1]-5-length);var text_x=ma.round(x);var text_y=obj.coords[i][1]-5-length;}else if(prop['chart.variant']=='arrow'){co.moveTo(ma.round(x),obj.coords[i][1]-5);co.lineTo(ma.round(x),obj.coords[i][1]-5-length);var text_x=ma.round(x);var text_y=obj.coords[i][1]-5-length;}else{co.arc(ma.round(x),y,2.5,0,6.28,0);co.moveTo(ma.round(x),y);co.lineTo(ma.round(x),y-length);var text_x=ma.round(x);var text_y=y-length;}\nco.stroke();co.fill();}else{if(typeof labels_processed[i]=='object'&&typeof labels_processed[i][3]=='number'&&labels_processed[i][3]==-1){drawUpArrow(x,y)\nvar valign='top';var text_x=x;var text_y=y+5+length;}else{var text_x=x;var text_y=y-5-length;if(text_y<5&&(typeof labels_processed[i]==='string'||typeof labels_processed[i][3]==='undefined')){text_y=y+5+length;var valign='top';}\nif(valign==='top'){drawUpArrow(x,y);}else{drawDownArrow(x,y);}}\nco.fill();}\nco.beginPath();co.fillStyle=(typeof labels_processed[i]==='object'&&typeof labels_processed[i][1]==='string')?labels_processed[i][1]:'black';RG.text2(obj,{font:prop['chart.text.font'],size:prop['chart.text.size'],x:text_x,y:text_y+(obj.properties['chart.text.accessible']?2:0),text:(typeof labels_processed[i]==='object'&&typeof labels_processed[i][0]==='string')?labels_processed[i][0]:labels_processed[i],valign:valign||'bottom',halign:'center',bounding:true,'bounding.fill':(typeof labels_processed[i]==='object'&&typeof labels_processed[i][2]==='string')?labels_processed[i][2]:'white',tag:'labels ingraph'});co.fill();}\nfunction drawUpArrow(x,y)\n{co.moveTo(ma.round(x),y+5);co.lineTo(ma.round(x),y+5+length);co.stroke();co.beginPath();co.moveTo(ma.round(x),y+5);co.lineTo(ma.round(x)-3,y+10);co.lineTo(ma.round(x)+3,y+10);co.closePath();}\nfunction drawDownArrow(x,y)\n{co.moveTo(ma.round(x),y-5);co.lineTo(ma.round(x),y-5-length);co.stroke();co.beginPath();co.moveTo(ma.round(x),y-5);co.lineTo(ma.round(x)-3,y-10);co.lineTo(ma.round(x)+3,y-10);co.closePath();}\nvalign=undefined;}}}};RG.fixEventObject=RG.FixEventObject=function(e)\n{if(RG.ISOLD){var e=event;e.pageX=(event.clientX+doc.body.scrollLeft);e.pageY=(event.clientY+doc.body.scrollTop);e.target=event.srcElement;if(!doc.body.scrollTop&&doc.documentElement.scrollTop){e.pageX+=parseInt(doc.documentElement.scrollLeft);e.pageY+=parseInt(doc.documentElement.scrollTop);}}\nif(!e.stopPropagation){e.stopPropagation=function(){window.event.cancelBubble=true;}}\nreturn e;};RG.hideCrosshairCoords=RG.HideCrosshairCoords=function()\n{var div=RG.Registry.Get('chart.coordinates.coords.div');if(div&&div.style.opacity==1&&div.__object__.Get('chart.crosshairs.coords.fadeout')){var style=RG.Registry.Get('chart.coordinates.coords.div').style;setTimeout(function(){style.opacity=0.9;},25);setTimeout(function(){style.opacity=0.8;},50);setTimeout(function(){style.opacity=0.7;},75);setTimeout(function(){style.opacity=0.6;},100);setTimeout(function(){style.opacity=0.5;},125);setTimeout(function(){style.opacity=0.4;},150);setTimeout(function(){style.opacity=0.3;},175);setTimeout(function(){style.opacity=0.2;},200);setTimeout(function(){style.opacity=0.1;},225);setTimeout(function(){style.opacity=0;},250);setTimeout(function(){style.display='none';},275);}};RG.draw3DAxes=RG.Draw3DAxes=function(obj)\n{var prop=obj.properties,co=obj.context,ca=obj.canvas;var gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,xaxispos=prop['chart.xaxispos'],graphArea=ca.height-gutterTop-gutterBottom,halfGraphArea=graphArea/2,offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety'],xaxis=prop['chart.variant.threed.xaxis'],yaxis=prop['chart.variant.threed.yaxis']\nif(yaxis){RG.draw3DYAxis(obj);}\nif(xaxis){if(xaxispos==='center'){RG.path2(co,'b m % % l % % l % % l % % c s #aaa f #ddd',gutterLeft,gutterTop+halfGraphArea,gutterLeft+offsetx,gutterTop+halfGraphArea-offsety,ca.width-gutterRight+offsetx,gutterTop+halfGraphArea-offsety,ca.width-gutterRight,gutterTop+halfGraphArea);}else{if(obj.type==='hbar'){var xaxisYCoord=obj.canvas.height-obj.properties['chart.gutter.bottom'];}else{var xaxisYCoord=obj.getYCoord(0);}\nRG.path2(co,'m % % l % % l % % l % % c s #aaa f #ddd',gutterLeft,xaxisYCoord,gutterLeft+offsetx,xaxisYCoord-offsety,ca.width-gutterRight+offsetx,xaxisYCoord-offsety,ca.width-gutterRight,xaxisYCoord);}}};RG.draw3DYAxis=function(obj)\n{var prop=obj.properties,co=obj.context,ca=obj.canvas;var gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,xaxispos=prop['chart.xaxispos'],graphArea=ca.height-gutterTop-gutterBottom,halfGraphArea=graphArea/2,offsetx=prop['chart.variant.threed.offsetx'],offsety=prop['chart.variant.threed.offsety']\nif((obj.type==='hbar'||obj.type==='bar')&&prop['chart.yaxispos']==='center'){var x=((ca.width-gutterLeft-gutterRight)/2)+gutterLeft;}else if((obj.type==='hbar'||obj.type==='bar')&&prop['chart.yaxispos']==='right'){var x=ca.width-gutterRight;}else{var x=gutterLeft;}\nRG.path2(co,'b m % % l % % l % % l % % s #aaa f #ddd',x,gutterTop,x+offsetx,gutterTop-offsety,x+offsetx,ca.height-gutterBottom-offsety,x,ca.height-gutterBottom);};RG.strokedCurvyRect=function(co,x,y,w,h)\n{var r=arguments[5]?arguments[5]:3;var corner_tl=(arguments[6]||arguments[6]==null)?true:false;var corner_tr=(arguments[7]||arguments[7]==null)?true:false;var corner_br=(arguments[8]||arguments[8]==null)?true:false;var corner_bl=(arguments[9]||arguments[9]==null)?true:false;co.beginPath();co.moveTo(x+(corner_tl?r:0),y);co.lineTo(x+w-(corner_tr?r:0),y);if(corner_tr){co.arc(x+w-r,y+r,r,RG.PI+RG.HALFPI,RG.TWOPI,false);}\nco.lineTo(x+w,y+h-(corner_br?r:0));if(corner_br){co.arc(x+w-r,y-r+h,r,RG.TWOPI,RG.HALFPI,false);}\nco.lineTo(x+(corner_bl?r:0),y+h);if(corner_bl){co.arc(x+r,y-r+h,r,RG.HALFPI,RG.PI,false);}\nco.lineTo(x,y+(corner_tl?r:0));if(corner_tl){co.arc(x+r,y+r,r,RG.PI,RG.PI+RG.HALFPI,false);}\nco.stroke();};RG.filledCurvyRect=function(co,x,y,w,h)\n{var r=arguments[5]?arguments[5]:3;var corner_tl=(arguments[6]||arguments[6]==null)?true:false;var corner_tr=(arguments[7]||arguments[7]==null)?true:false;var corner_br=(arguments[8]||arguments[8]==null)?true:false;var corner_bl=(arguments[9]||arguments[9]==null)?true:false;co.beginPath();if(corner_tl){co.moveTo(x+r,y+r);co.arc(x+r,y+r,r,RG.PI,RG.PI+RG.HALFPI,false);}else{co.fillRect(x,y,r,r);}\nif(corner_tr){co.moveTo(x+w-r,y+r);co.arc(x+w-r,y+r,r,RG.PI+RG.HALFPI,0,false);}else{co.moveTo(x+w-r,y);co.fillRect(x+w-r,y,r,r);}\nif(corner_br){co.moveTo(x+w-r,y+h-r);co.arc(x+w-r,y-r+h,r,0,RG.HALFPI,false);}else{co.moveTo(x+w-r,y+h-r);co.fillRect(x+w-r,y+h-r,r,r);}\nif(corner_bl){co.moveTo(x+r,y+h-r);co.arc(x+r,y-r+h,r,RG.HALFPI,RG.PI,false);}else{co.moveTo(x,y+h-r);co.fillRect(x,y+h-r,r,r);}\nco.fillRect(x+r,y,w-r-r,h);co.fillRect(x,y+r,r+1,h-r-r);co.fillRect(x+w-r-1,y+r,r+1,h-r-r);co.fill();};RG.hideZoomedCanvas=RG.HideZoomedCanvas=function()\n{var interval=10;var frames=15;if(typeof RG.zoom_image==='object'){var obj=RG.zoom_image.obj;var prop=obj.properties;}else{return;}\nif(prop['chart.zoom.fade.out']){for(var i=frames,j=1;i>=0;--i,++j){if(typeof RG.zoom_image==='object'){setTimeout(\"RGraph.zoom_image.style.opacity = \"+String(i/10),j*interval);}}\nif(typeof RG.zoom_background==='object'){setTimeout(\"RGraph.zoom_background.style.opacity = \"+String(i/frames),j*interval);}}\nif(typeof RG.zoom_image==='object'){setTimeout(\"RGraph.zoom_image.style.display = 'none'\",prop['chart.zoom.fade.out']?(frames*interval)+10:0);}\nif(typeof RG.zoom_background==='object'){setTimeout(\"RGraph.zoom_background.style.display = 'none'\",prop['chart.zoom.fade.out']?(frames*interval)+10:0);}};RG.addCustomEventListener=RG.AddCustomEventListener=function(obj,name,func)\n{if(typeof RG.events[obj.uid]==='undefined'){RG.events[obj.uid]=[];}\nif(name.substr(0,2)!=='on'){name='on'+name;}\nRG.events[obj.uid].push([obj,name,func]);return RG.events[obj.uid].length-1;};RG.fireCustomEvent=RG.FireCustomEvent=function(obj,name)\n{if(obj&&obj.isRGraph){if(name.match(/(on)?mouseout/)&&typeof obj.properties['chart.events.mouseout']==='function'){(obj.properties['chart.events.mouseout'])(obj);}\nif(obj[name]){(obj[name])(obj);}\nvar uid=obj.uid;if(typeof uid==='string'&&typeof RG.events==='object'&&typeof RG.events[uid]==='object'&&RG.events[uid].length>0){for(var j=0;j<RG.events[uid].length;++j){if(RG.events[uid][j]&&RG.events[uid][j][1]===name){RG.events[uid][j][2](obj);}}}}};RGraph.removeAllCustomEventListeners=RGraph.RemoveAllCustomEventListeners=function()\n{var id=arguments[0];if(id&&RG.events[id]){RG.events[id]=[];}else{RG.events=[];}};RG.removeCustomEventListener=RG.RemoveCustomEventListener=function(obj,i)\n{if(typeof RG.events==='object'&&typeof RG.events[obj.id]==='object'&&typeof RG.events[obj.id][i]==='object'){RG.events[obj.id][i]=null;}};RG.drawBackgroundImage=RG.DrawBackgroundImage=function(obj)\n{var prop=obj.properties;var ca=obj.canvas;var co=obj.context;if(typeof prop['chart.background.image']==='string'){if(typeof ca.__rgraph_background_image__==='undefined'){var img=new Image();img.__object__=obj;img.__canvas__=ca;img.__context__=co;img.src=obj.Get('chart.background.image');ca.__rgraph_background_image__=img;}else{img=ca.__rgraph_background_image__;}\nimg.onload=function()\n{obj.__rgraph_background_image_loaded__=true;RG.clear(ca);RG.redrawCanvas(ca);}\nvar gutterLeft=obj.gutterLeft;var gutterRight=obj.gutterRight;var gutterTop=obj.gutterTop;var gutterBottom=obj.gutterBottom;var stretch=prop['chart.background.image.stretch'];var align=prop['chart.background.image.align'];if(typeof align==='string'){if(align.indexOf('right')!=-1){var x=ca.width-(prop['chart.background.image.w']||img.width)-gutterRight;}else{var x=gutterLeft;}\nif(align.indexOf('bottom')!=-1){var y=ca.height-(prop['chart.background.image.h']||img.height)-gutterBottom;}else{var y=gutterTop;}}else{var x=gutterLeft||25;var y=gutterTop||25;}\nvar x=typeof prop['chart.background.image.x']==='number'?prop['chart.background.image.x']:x;var y=typeof prop['chart.background.image.y']==='number'?prop['chart.background.image.y']:y;var w=stretch?ca.width-gutterLeft-gutterRight:img.width;var h=stretch?ca.height-gutterTop-gutterBottom:img.height;if(typeof prop['chart.background.image.w']==='number')w=prop['chart.background.image.w'];if(typeof prop['chart.background.image.h']==='number')h=prop['chart.background.image.h'];var oldAlpha=co.globalAlpha;co.globalAlpha=prop['chart.background.image.alpha'];co.drawImage(img,x,y,w,h);co.globalAlpha=oldAlpha;}};RG.hasTooltips=function(obj)\n{var prop=obj.properties;if(typeof prop['chart.tooltips']=='object'&&prop['chart.tooltips']){for(var i=0,len=prop['chart.tooltips'].length;i<len;++i){if(!RG.is_null(obj.Get('chart.tooltips')[i])){return true;}}}else if(typeof prop['chart.tooltips']==='function'){return true;}\nreturn false;};RG.createUID=RG.CreateUID=function()\n{return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c)\n{var r=ma.random()*16|0,v=c=='x'?r:(r&0x3|0x8);return v.toString(16);});};RG.OR.add=RG.OR.Add=function(obj)\n{var uid=obj.uid;var id=obj.canvas.id;RG.ObjectRegistry.objects.byUID.push([uid,obj]);RG.ObjectRegistry.objects.byCanvasID.push([id,obj]);};RG.OR.remove=RG.OR.Remove=function(obj)\n{var id=obj.id;var uid=obj.uid;for(var i=0;i<RG.ObjectRegistry.objects.byUID.length;++i){if(RG.ObjectRegistry.objects.byUID[i]&&RG.ObjectRegistry.objects.byUID[i][1].uid==uid){RG.ObjectRegistry.objects.byUID[i]=null;}}\nfor(var i=0;i<RG.ObjectRegistry.objects.byCanvasID.length;++i){if(RG.ObjectRegistry.objects.byCanvasID[i]&&RG.ObjectRegistry.objects.byCanvasID[i][1]&&RG.ObjectRegistry.objects.byCanvasID[i][1].uid==uid){RG.ObjectRegistry.objects.byCanvasID[i]=null;}}};RG.OR.clear=RG.OR.Clear=function()\n{if(arguments[0]){var id=(typeof arguments[0]==='object'?arguments[0].id:arguments[0]);var objects=RG.ObjectRegistry.getObjectsByCanvasID(id);for(var i=0,len=objects.length;i<len;++i){RG.ObjectRegistry.remove(objects[i]);}}else{RG.ObjectRegistry.objects={};RG.ObjectRegistry.objects.byUID=[];RG.ObjectRegistry.objects.byCanvasID=[];}};RG.OR.list=RG.OR.List=function()\n{var list=[];for(var i=0,len=RG.ObjectRegistry.objects.byUID.length;i<len;++i){if(RG.ObjectRegistry.objects.byUID[i]){list.push(RG.ObjectRegistry.objects.byUID[i][1].type);}}\nif(arguments[0]){return list;}else{$p(list);}};RG.OR.clearByType=RG.OR.ClearByType=function(type)\n{var objects=RG.ObjectRegistry.objects.byUID;for(var i=0,len=objects.length;i<len;++i){if(objects[i]){var uid=objects[i][0];var obj=objects[i][1];if(obj&&obj.type==type){RG.ObjectRegistry.remove(obj);}}}};RG.OR.iterate=RG.OR.Iterate=function(func)\n{var objects=RGraph.ObjectRegistry.objects.byUID;for(var i=0,len=objects.length;i<len;++i){if(typeof arguments[1]==='string'){var types=arguments[1].split(/,/);for(var j=0,len2=types.length;j<len2;++j){if(types[j]==objects[i][1].type){func(objects[i][1]);}}}else{func(objects[i][1]);}}};RG.OR.getObjectsByCanvasID=function(id)\n{var store=RG.ObjectRegistry.objects.byCanvasID;var ret=[];for(var i=0,len=store.length;i<len;++i){if(store[i]&&store[i][0]==id){ret.push(store[i][1]);}}\nreturn ret;};RG.OR.firstbyxy=RG.OR.getFirstObjectByXY=RG.OR.getObjectByXY=function(e)\n{var canvas=e.target;var ret=null;var objects=RG.ObjectRegistry.getObjectsByCanvasID(canvas.id);for(var i=(objects.length-1);i>=0;--i){var obj=objects[i].getObjectByXY(e);if(obj){return obj;}}};RG.OR.getObjectsByXY=function(e)\n{var canvas=e.target,ret=[],objects=RG.ObjectRegistry.getObjectsByCanvasID(canvas.id);for(var i=(objects.length-1);i>=0;--i){var obj=objects[i].getObjectByXY(e);if(obj){ret.push(obj);}}\nreturn ret;};RG.OR.get=RG.OR.getObjectByUID=function(uid)\n{var objects=RG.ObjectRegistry.objects.byUID;for(var i=0,len=objects.length;i<len;++i){if(objects[i]&&objects[i][1].uid==uid){return objects[i][1];}}};RG.OR.bringToFront=function(obj)\n{var redraw=typeof arguments[1]==='undefined'?true:arguments[1];RG.ObjectRegistry.remove(obj);RG.ObjectRegistry.add(obj);if(redraw){RG.redrawCanvas(obj.canvas);}};RG.OR.type=RG.OR.getObjectsByType=function(type)\n{var objects=RG.ObjectRegistry.objects.byUID;var ret=[];for(var i=0,len=objects.length;i<len;++i){if(objects[i]&&objects[i][1]&&objects[i][1].type&&objects[i][1].type&&objects[i][1].type==type){ret.push(objects[i][1]);}}\nreturn ret;};RG.OR.first=RG.OR.getFirstObjectByType=function(type)\n{var objects=RG.ObjectRegistry.objects.byUID;for(var i=0,len=objects.length;i<len;++i){if(objects[i]&&objects[i][1]&&objects[i][1].type==type){return objects[i][1];}}\nreturn null;};RG.getAngleByXY=function(cx,cy,x,y)\n{var angle=ma.atan((y-cy)/(x-cx));angle=ma.abs(angle)\nif(x>=cx&&y>=cy){angle+=RG.TWOPI;}else if(x>=cx&&y<cy){angle=(RG.HALFPI-angle)+(RG.PI+RG.HALFPI);}else if(x<cx&&y<cy){angle+=RG.PI;}else{angle=RG.PI-angle;}\nif(angle>RG.TWOPI){angle-=RG.TWOPI;}\nreturn angle;};RG.getHypLength=function(x1,y1,x2,y2)\n{var ret=ma.sqrt(((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1)));return ret;};RG.getRadiusEndPoint=function(cx,cy,angle,radius)\n{var x=cx+(ma.cos(angle)*radius);var y=cy+(ma.sin(angle)*radius);return[x,y];};RG.installEventListeners=RG.InstallEventListeners=function(obj)\n{var prop=obj.properties;if(RG.ISOLD){return;}\nif(RG.installCanvasClickListener){RG.installWindowMousedownListener(obj);RG.installWindowMouseupListener(obj);RG.installCanvasMousemoveListener(obj);RG.installCanvasMouseupListener(obj);RG.installCanvasMousedownListener(obj);RG.installCanvasClickListener(obj);}else if(RG.hasTooltips(obj)||prop['chart.adjustable']||prop['chart.annotatable']||prop['chart.contextmenu']||prop['chart.resizable']||prop['chart.key.interactive']||prop['chart.events.click']||prop['chart.events.mousemove']||typeof obj.onclick==='function'||typeof obj.onmousemove==='function'){alert('[RGRAPH] You appear to have used dynamic features but not included the file: RGraph.common.dynamic.js');}};RG.pr=function(obj)\n{var indent=(arguments[2]?arguments[2]:'    ');var str='';var counter=typeof arguments[3]=='number'?arguments[3]:0;if(counter>=5){return'';}\nswitch(typeof obj){case'string':str+=obj+' ('+(typeof obj)+', '+obj.length+')';break;case'number':str+=obj+' ('+(typeof obj)+')';break;case'boolean':str+=obj+' ('+(typeof obj)+')';break;case'function':str+='function () {}';break;case'undefined':str+='undefined';break;case'null':str+='null';break;case'object':if(RGraph.is_null(obj)){str+=indent+'null\\n';}else{str+=indent+'Object {'+'\\n'\nfor(j in obj){str+=indent+'    '+j+' => '+RGraph.pr(obj[j],true,indent+'    ',counter+1)+'\\n';}\nstr+=indent+'}';}\nbreak;default:str+='Unknown type: '+typeof obj+'';break;}\nif(!arguments[1]){alert(str);}\nreturn str;};RG.dashedLine=RG.DashedLine=function(co,x1,y1,x2,y2)\n{var size=5;if(typeof arguments[5]==='number'){size=arguments[5];}\nvar dx=x2-x1;var dy=y2-y1;var num=ma.floor(ma.sqrt((dx*dx)+(dy*dy))/size);var xLen=dx/num;var yLen=dy/num;var count=0;do{(count%2==0&&count>0)?co.lineTo(x1,y1):co.moveTo(x1,y1);x1+=xLen;y1+=yLen;}while(count++<=num);};RG.AJAX=function(url,callback)\n{if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('GET',url,true);httpRequest.send();};RG.AJAX.POST=function(url,data,callback)\n{var crumbs=[];if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('POST',url,true);httpRequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");for(i in data){if(typeof i=='string'){crumbs.push(i+'='+encodeURIComponent(data[i]));}}\nhttpRequest.send(crumbs.join('&'));};RG.AJAX.getNumber=function(url,callback)\n{RG.AJAX(url,function()\n{var num=parseFloat(this.responseText);callback(num);});};RG.AJAX.getString=function(url,callback)\n{RG.AJAX(url,function()\n{var str=String(this.responseText);callback(str);});};RG.AJAX.getJSON=function(url,callback)\n{RG.AJAX(url,function()\n{var json=eval('('+this.responseText+')');callback(json);});};RG.AJAX.getCSV=function(url,callback)\n{var seperator=arguments[2]?arguments[2]:',';RG.AJAX(url,function()\n{var regexp=new RegExp(seperator);var arr=this.responseText.split(regexp);for(var i=0,len=arr.length;i<len;++i){arr[i]=parseFloat(arr[i]);}\ncallback(arr);});};RG.rotateCanvas=RG.RotateCanvas=function(ca,x,y,angle)\n{var co=ca.getContext('2d');co.translate(x,y);co.rotate(angle);co.translate(0-x,0-y);};RG.measureText=RG.MeasureText=function(text,bold,font,size)\n{if(typeof RG.measuretext_cache==='undefined'){RG.measuretext_cache=[];}\nvar str=text+':'+bold+':'+font+':'+size;if(typeof RG.measuretext_cache=='object'&&RG.measuretext_cache[str]){return RG.measuretext_cache[str];}\nif(!RG.measuretext_cache['text-div']){var div=document.createElement('DIV');div.style.position='absolute';div.style.top='-100px';div.style.left='-100px';document.body.appendChild(div);RG.measuretext_cache['text-div']=div;}else if(RG.measuretext_cache['text-div']){var div=RG.measuretext_cache['text-div'];}\ndiv.innerHTML=text.replace(/\\r\\n/g,'<br />');div.style.fontFamily=font;div.style.fontWeight=bold?'bold':'normal';div.style.fontSize=(size||12)+'pt';var size=[div.offsetWidth,div.offsetHeight];RG.measuretext_cache[str]=size;return size;};RG.text2=RG.Text2=function(obj,opt)\n{function domtext()\n{if(String(opt.size).toLowerCase().indexOf('italic')!==-1){opt.size=opt.size.replace(/ *italic +/,'');opt.italic=true;}\nvar cacheKey=ma.abs(parseInt(opt.x))+'_'+ma.abs(parseInt(opt.y))+'_'+String(opt.text).replace(/[^a-zA-Z0-9]+/g,'_')+'_'+obj.canvas.id;if(!ca.rgraph_domtext_wrapper){var wrapper=document.createElement('div');wrapper.id=ca.id+'_rgraph_domtext_wrapper';wrapper.className='rgraph_domtext_wrapper';wrapper.style.overflow=obj.properties['chart.text.accessible.overflow']!=false&&obj.properties['chart.text.accessible.overflow']!='hidden'?'visible':'hidden';wrapper.style.width=ca.offsetWidth+'px';wrapper.style.height=ca.offsetHeight+'px';wrapper.style.cssFloat=ca.style.cssFloat;wrapper.style.display=ca.style.display||'inline-block';wrapper.style.position=ca.style.position||'relative';wrapper.style.left=ca.style.left;wrapper.style.top=ca.style.top;wrapper.style.width=ca.width+'px';wrapper.style.height=ca.height+'px';wrapper.style.lineHeight='initial';ca.style.position='absolute';ca.style.left=0;ca.style.top=0;ca.style.display='inline';ca.style.cssFloat='none';if((obj.type==='bar'||obj.type==='bipolar'||obj.type==='hbar')&&obj.properties['chart.variant']==='3d'){wrapper.style.transform='skewY(5.7deg)';}\nca.parentNode.insertBefore(wrapper,ca);ca.parentNode.removeChild(ca);wrapper.appendChild(ca);ca.rgraph_domtext_wrapper=wrapper;}else{wrapper=ca.rgraph_domtext_wrapper;}\nvar defaults={size:12,font:'Arial',italic:'normal',bold:'normal',valign:'bottom',halign:'left',marker:true,color:co.fillStyle,bounding:{enabled:false,fill:'rgba(255,255,255,0.7)',stroke:'#666'}}\nopt.text=String(opt.text).replace(/\\r?\\n/g,'[[RETURN]]');if(typeof RG.text2.domNodeCache==='undefined'){RG.text2.domNodeCache=new Array();}\nif(typeof RG.text2.domNodeCache[obj.id]==='undefined'){RG.text2.domNodeCache[obj.id]=new Array();}\nif(typeof RG.text2.domNodeDimensionCache==='undefined'){RG.text2.domNodeDimensionCache=new Array();}\nif(typeof RG.text2.domNodeDimensionCache[obj.id]==='undefined'){RG.text2.domNodeDimensionCache[obj.id]=new Array();}\nif(!RG.text2.domNodeCache[obj.id]||!RG.text2.domNodeCache[obj.id][cacheKey]){var span=document.createElement('span');span.style.position='absolute';span.style.display='inline';span.style.left=(opt.x*(parseInt(ca.offsetWidth)/parseInt(ca.width)))+'px';span.style.top=(opt.y*(parseInt(ca.offsetHeight)/parseInt(ca.height)))+'px';span.style.color=opt.color||defaults.color;span.style.fontFamily=opt.font||defaults.font;span.style.fontWeight=opt.bold?'bold':defaults.bold;span.style.fontStyle=opt.italic?'italic':defaults.italic;span.style.fontSize=(opt.size||defaults.size)+'pt';span.style.whiteSpace='nowrap';span.tag=opt.tag;if(typeof opt.angle==='number'&&opt.angle!==0){var coords=RG.measureText(opt.text,opt.bold,opt.font,opt.size);span.style.transformOrigin='100% 50%';span.style.transform='rotate('+opt.angle+'deg)';}\nspan.style.textShadow='{1}px {2}px {3}px {4}'.format(co.shadowOffsetX,co.shadowOffsetY,co.shadowBlur,co.shadowColor);if(opt.bounding){span.style.border='1px solid '+(opt['bounding.stroke']||defaults.bounding.stroke);span.style.backgroundColor=opt['bounding.fill']||defaults.bounding.fill;}\nif((typeof obj.properties['chart.text.accessible.pointerevents']==='undefined'||obj.properties['chart.text.accessible.pointerevents'])&&obj.properties['chart.text.accessible.pointerevents']!=='none'){span.style.pointerEvents='auto';}else{span.style.pointerEvents='none';}\nspan.style.padding=opt.bounding?'2px':null;span.__text__=opt.text\nspan.innerHTML=opt.text.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;');span.innerHTML=span.innerHTML.replace(/\\[\\[RETURN\\]\\]/g,'<br />');wrapper.appendChild(span);opt.halign=opt.halign||'left';opt.valign=opt.valign||'bottom';if(opt.halign==='right'){span.style.left=parseFloat(span.style.left)-span.offsetWidth+'px';span.style.textAlign='right';}else if(opt.halign==='center'){span.style.left=parseFloat(span.style.left)-(span.offsetWidth/2)+'px';span.style.textAlign='center';}\nif(opt.valign==='top'){}else if(opt.valign==='center'){span.style.top=parseFloat(span.style.top)-(span.offsetHeight/2)+'px';}else{span.style.top=parseFloat(span.style.top)-span.offsetHeight+'px';}\nvar offsetWidth=parseFloat(span.offsetWidth),offsetHeight=parseFloat(span.offsetHeight),top=parseFloat(span.style.top),left=parseFloat(span.style.left);RG.text2.domNodeCache[obj.id][cacheKey]=span;RG.text2.domNodeDimensionCache[obj.id][cacheKey]={left:left,top:top,width:offsetWidth,height:offsetHeight};span.id=cacheKey;}else{span=RG.text2.domNodeCache[obj.id][cacheKey];span.style.display='inline';var offsetWidth=RG.text2.domNodeDimensionCache[obj.id][cacheKey].width,offsetHeight=RG.text2.domNodeDimensionCache[obj.id][cacheKey].height,top=RG.text2.domNodeDimensionCache[obj.id][cacheKey].top,left=RG.text2.domNodeDimensionCache[obj.id][cacheKey].left;}\nif(opt.marker){RG.path2(context,'b m % % l % % m % % l % % s',opt.x-5,opt.y,opt.x+5,opt.y,opt.x,opt.y-5,opt.x,opt.y+5);}\nif(obj.type==='drawing.text'){if(obj.properties['chart.events.mousemove']){span.addEventListener('mousemove',function(e){(obj.properties['chart.events.mousemove'])(e,obj);},false);}\nif(obj.properties['chart.events.click']){span.addEventListener('click',function(e){(obj.properties['chart.events.click'])(e,obj);},false);}\nif(obj.properties['chart.tooltips']){span.addEventListener(obj.properties['chart.tooltips.event'].indexOf('mousemove')!==-1?'mousemove':'click',function(e)\n{if(!RG.Registry.get('chart.tooltip')||RG.Registry.get('chart.tooltip').__index__!==0||RG.Registry.get('chart.tooltip').__object__.uid!=obj.uid){RG.hideTooltip();RG.redraw();RG.tooltip(obj,obj.properties['chart.tooltips'][0],opt.x,opt.y,0,e);}},false);}}\nvar ret={};ret.x=left;ret.y=top;ret.width=offsetWidth;ret.height=offsetHeight;ret.object=obj;ret.text=opt.text;ret.tag=opt.tag;RG.text2.domNodeCache.reset=function()\n{if(arguments[0]){if(typeof arguments[0]==='string'){var ca=document.getElementById(arguments[0])}else{var ca=arguments[0];}\nvar nodes=RG.text2.domNodeCache[ca.id];for(j in nodes){var node=RG.text2.domNodeCache[ca.id][j];if(node&&node.parentNode){node.parentNode.removeChild(node);}}\nRG.text2.domNodeCache[ca.id]=[];RG.text2.domNodeDimensionCache[ca.id]=[];}else{for(i in RG.text2.domNodeCache){for(j in RG.text2.domNodeCache[i]){if(RG.text2.domNodeCache[i][j]&&RG.text2.domNodeCache[i][j].parentNode){RG.text2.domNodeCache[i][j].parentNode.removeChild(RG.text2.domNodeCache[i][j]);}}}\nRG.text2.domNodeCache=[];RG.text2.domNodeDimensionCache=[];}};RG.text2.find=function(opt)\n{var span,nodes=[];var id=typeof opt.id==='string'?opt.id:opt.object.id;for(i in RG.text2.domNodeCache[id]){span=RG.text2.domNodeCache[id][i];if(typeof opt.tag==='string'&&opt.tag===span.tag){nodes.push(span);continue;}\nif(typeof opt.tag==='object'&&opt.tag.constructor.toString().indexOf('RegExp')){var regexp=new RegExp(opt.tag);if(regexp.test(span.tag)){nodes.push(span);continue;}}\nif(typeof opt.text==='string'&&opt.text===span.__text__){nodes.push(span);continue;}\nif(typeof opt.text==='object'&&opt.text.constructor.toString().indexOf('RegExp')){var regexp=new RegExp(opt.text);if(regexp.test(span.__text__)){nodes.push(span);continue;}}}\nreturn nodes;};ret.node=span;if(obj&&obj.isRGraph&&obj.coordsText){obj.coordsText.push(ret);}\nreturn ret;}\nif(obj&&obj.isRGraph){var obj=obj;var co=obj.context;var ca=obj.canvas;}else if(typeof obj=='string'){var ca=document.getElementById(obj);var co=ca.getContext('2d');var obj=ca.__object__;}else if(typeof obj.getContext==='function'){var ca=obj;var co=ca.getContext('2d');var obj=ca.__object__;}else if(obj.toString().indexOf('CanvasRenderingContext2D')!=-1||RGraph.ISIE8&&obj.moveTo){var co=obj;var ca=obj.canvas;var obj=ca.__object__;}else if(RG.ISOLD&&obj.fillText){var co=obj;var ca=obj.canvas;var obj=ca.__object__;}\nif(typeof opt.boundingFill==='string')opt['bounding.fill']=opt.boundingFill;if(typeof opt.boundingStroke==='string')opt['bounding.stroke']=opt.boundingStroke;if(obj&&obj.properties['chart.text.accessible']&&opt.accessible!==false){return domtext();}\nvar x=opt.x,y=opt.y,originalX=x,originalY=y,text=opt.text,text_multiline=typeof text==='string'?text.split(/\\r?\\n/g):'',numlines=text_multiline.length,font=opt.font?opt.font:'Arial',size=opt.size?opt.size:10,size_pixels=size*1.5,bold=opt.bold,italic=opt.italic,halign=opt.halign?opt.halign:'left',valign=opt.valign?opt.valign:'bottom',tag=typeof opt.tag=='string'&&opt.tag.length>0?opt.tag:'',marker=opt.marker,angle=opt.angle||0\nvar bounding=opt.bounding,bounding_stroke=opt['bounding.stroke']?opt['bounding.stroke']:'black',bounding_fill=opt['bounding.fill']?opt['bounding.fill']:'rgba(255,255,255,0.7)',bounding_shadow=opt['bounding.shadow'],bounding_shadow_color=opt['bounding.shadow.color']||'#ccc',bounding_shadow_blur=opt['bounding.shadow.blur']||3,bounding_shadow_offsetx=opt['bounding.shadow.offsetx']||3,bounding_shadow_offsety=opt['bounding.shadow.offsety']||3,bounding_linewidth=opt['bounding.linewidth']||1;var ret={};if(typeof opt.color==='string'){var orig_fillstyle=co.fillStyle;co.fillStyle=opt.color;}\nif(typeof text=='number'){text=String(text);}\nif(typeof text!=='string'){return;}\nif(angle!=0){co.save();co.translate(x,y);co.rotate((ma.PI/180)*angle)\nx=0;y=0;}\nco.font=(opt.italic?'italic ':'')+(opt.bold?'bold ':'')+size+'pt '+font;var width=0;for(var i=0;i<numlines;++i){width=ma.max(width,co.measureText(text_multiline[i]).width);}\nvar height=size_pixels*numlines;if(opt.marker){var marker_size=10;var strokestyle=co.strokeStyle;co.beginPath();co.strokeStyle='red';co.moveTo(x,y-marker_size);co.lineTo(x,y+marker_size);co.moveTo(x-marker_size,y);co.lineTo(x+marker_size,y);co.stroke();co.strokeStyle=strokestyle;}\nif(halign=='center'){co.textAlign='center';var boundingX=x-2-(width/2);}else if(halign=='right'){co.textAlign='right';var boundingX=x-2-width;}else{co.textAlign='left';var boundingX=x-2;}\nif(valign=='center'){co.textBaseline='middle';y-=1;y-=((numlines-1)/2)*size_pixels;var boundingY=y-(size_pixels/2)-2;}else if(valign=='top'){co.textBaseline='top';var boundingY=y-2;}else{co.textBaseline='bottom';if(numlines>1){y-=((numlines-1)*size_pixels);}\nvar boundingY=y-size_pixels-2;}\nvar boundingW=width+4;var boundingH=height+4;if(bounding){var pre_bounding_linewidth=co.lineWidth;var pre_bounding_strokestyle=co.strokeStyle;var pre_bounding_fillstyle=co.fillStyle;var pre_bounding_shadowcolor=co.shadowColor;var pre_bounding_shadowblur=co.shadowBlur;var pre_bounding_shadowoffsetx=co.shadowOffsetX;var pre_bounding_shadowoffsety=co.shadowOffsetY;co.lineWidth=bounding_linewidth;co.strokeStyle=bounding_stroke;co.fillStyle=bounding_fill;if(bounding_shadow){co.shadowColor=bounding_shadow_color;co.shadowBlur=bounding_shadow_blur;co.shadowOffsetX=bounding_shadow_offsetx;co.shadowOffsetY=bounding_shadow_offsety;}\nco.strokeRect(boundingX,boundingY,boundingW,boundingH);co.fillRect(boundingX,boundingY,boundingW,boundingH);co.lineWidth=pre_bounding_linewidth;co.strokeStyle=pre_bounding_strokestyle;co.fillStyle=pre_bounding_fillstyle;co.shadowColor=pre_bounding_shadowcolor\nco.shadowBlur=pre_bounding_shadowblur\nco.shadowOffsetX=pre_bounding_shadowoffsetx\nco.shadowOffsetY=pre_bounding_shadowoffsety}\nif(numlines>1){for(var i=0;i<numlines;++i){co.fillText(text_multiline[i],x,y+(size_pixels*i));}}else{co.fillText(text,x+0.5,y+0.5);}\nif(angle!=0){if(angle==90){if(halign=='left'){if(valign=='bottom'){boundingX=originalX-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-height-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}}else if(halign=='center'){if(valign=='bottom'){boundingX=originalX-2;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-2;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-height-2;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}}else if(halign=='right'){if(valign=='bottom'){boundingX=originalX-2;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-2;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-height-2;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}}}else if(angle==180){if(halign=='left'){if(valign=='bottom'){boundingX=originalX-width-2;boundingY=originalY-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='center'){boundingX=originalX-width-2;boundingY=originalY-(height/2)-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='top'){boundingX=originalX-width-2;boundingY=originalY-height-2;boundingW=width+4;boundingH=height+4;}}else if(halign=='center'){if(valign=='bottom'){boundingX=originalX-(width/2)-2;boundingY=originalY-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='center'){boundingX=originalX-(width/2)-2;boundingY=originalY-(height/2)-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='top'){boundingX=originalX-(width/2)-2;boundingY=originalY-height-2;boundingW=width+4;boundingH=height+4;}}else if(halign=='right'){if(valign=='bottom'){boundingX=originalX-2;boundingY=originalY-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='center'){boundingX=originalX-2;boundingY=originalY-(height/2)-2;boundingW=width+4;boundingH=height+4;}\nif(valign=='top'){boundingX=originalX-2;boundingY=originalY-height-2;boundingW=width+4;boundingH=height+4;}}}else if(angle==270){if(halign=='left'){if(valign=='bottom'){boundingX=originalX-height-2;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-4;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-2;boundingY=originalY-width-2;boundingW=height+4;boundingH=width+4;}}else if(halign=='center'){if(valign=='bottom'){boundingX=originalX-height-2;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-4;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-2;boundingY=originalY-(width/2)-2;boundingW=height+4;boundingH=width+4;}}else if(halign=='right'){if(valign=='bottom'){boundingX=originalX-height-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='center'){boundingX=originalX-(height/2)-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}\nif(valign=='top'){boundingX=originalX-2;boundingY=originalY-2;boundingW=height+4;boundingH=width+4;}}}\nco.restore();}\nco.textBaseline='alphabetic';co.textAlign='left';ret.x=boundingX;ret.y=boundingY;ret.width=boundingW;ret.height=boundingH\nret.object=obj;ret.text=text;ret.tag=tag;if(obj&&obj.isRGraph&&obj.coordsText){obj.coordsText.push(ret);}\nif(typeof orig_fillstyle==='string'){co.fillStyle=orig_fillstyle;}\nreturn ret;};RG.sequentialIndexToGrouped=function(index,data)\n{var group=0;var grouped_index=0;while(--index>=0){if(RG.is_null(data[group])){group++;grouped_index=0;continue;}\nif(typeof data[group]=='number'){group++\ngrouped_index=0;continue;}\ngrouped_index++;if(grouped_index>=data[group].length){group++;grouped_index=0;}}\nreturn[group,grouped_index];};RG.Highlight.rect=RG.Highlight.Rect=function(obj,shape)\n{var ca=obj.canvas;var co=obj.context;var prop=obj.properties;if(prop['chart.tooltips.highlight']){co.lineWidth=1;co.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];co.rect(shape['x'],shape['y'],shape['width'],shape['height']);co.stroke();co.fill();}};RG.Highlight.point=RG.Highlight.Point=function(obj,shape)\n{var prop=obj.properties;var ca=obj.canvas;var co=obj.context;if(prop['chart.tooltips.highlight']){co.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];var radius=prop['chart.highlight.point.radius']||2;co.arc(shape['x'],shape['y'],radius,0,RG.TWOPI,0);co.stroke();co.fill();}};RG.parseDate=function(str)\n{str=RG.trim(str);if(str==='now'){str=(new Date()).toString();}\nif(str.match(/^(\\d\\d)(?:-|\\/)(\\d\\d)(?:-|\\/)(\\d\\d\\d\\d)(.*)$/)){str='{1}/{2}/{3}{4}'.format(RegExp.$3,RegExp.$2,RegExp.$1,RegExp.$4);}\nif(str.match(/^(\\d\\d\\d\\d)(-|\\/)(\\d\\d)(-|\\/)(\\d\\d)( |T)(\\d\\d):(\\d\\d):(\\d\\d)$/)){str=RegExp.$1+'-'+RegExp.$3+'-'+RegExp.$5+'T'+RegExp.$7+':'+RegExp.$8+':'+RegExp.$9;}\nif(str.match(/^\\d\\d\\d\\d-\\d\\d-\\d\\d$/)){str=str.replace(/-/g,'/');}\nif(str.match(/^\\d\\d:\\d\\d:\\d\\d$/)){var dateObj=new Date();var date=dateObj.getDate();var month=dateObj.getMonth()+1;var year=dateObj.getFullYear();if(String(month).length===1)month='0'+month;if(String(date).length===1)date='0'+date;str=(year+'/'+month+'/'+date)+' '+str;}\nreturn Date.parse(str);};RG.resetColorsToOriginalValues=function(obj)\n{if(obj.original_colors){for(var j in obj.original_colors){if(typeof j==='string'&&j.substr(0,6)==='chart.'){obj.properties[j]=RG.arrayClone(obj.original_colors[j]);}}}\nif(typeof obj.resetColorsToOriginalValues==='function'){obj.resetColorsToOriginalValues();}\nobj.colorsParsed=false;};RG.linearGradient=RG.LinearGradient=function(obj,x1,y1,x2,y2,color1,color2)\n{var gradient=obj.context.createLinearGradient(x1,y1,x2,y2);var numColors=arguments.length-5;for(var i=5;i<arguments.length;++i){var color=arguments[i];var stop=(i-5)/(numColors-1);gradient.addColorStop(stop,color);}\nreturn gradient;};RG.radialGradient=RG.RadialGradient=function(obj,x1,y1,r1,x2,y2,r2,color1,color2)\n{var gradient=obj.context.createRadialGradient(x1,y1,r1,x2,y2,r2);var numColors=arguments.length-7;for(var i=7;i<arguments.length;++i){var color=arguments[i];var stop=(i-7)/(numColors-1);gradient.addColorStop(stop,color);}\nreturn gradient;};RG.addEventListener=RG.AddEventListener=function(id,e,func)\n{var type=arguments[3]?arguments[3]:'unknown';RG.Registry.get('chart.event.handlers').push([id,e,func,type]);};RG.clearEventListeners=RG.ClearEventListeners=function(id)\n{if(id&&id=='window'){window.removeEventListener('mousedown',window.__rgraph_mousedown_event_listener_installed__,false);window.removeEventListener('mouseup',window.__rgraph_mouseup_event_listener_installed__,false);}else{var canvas=document.getElementById(id);canvas.removeEventListener('mouseup',canvas.__rgraph_mouseup_event_listener_installed__,false);canvas.removeEventListener('mousemove',canvas.__rgraph_mousemove_event_listener_installed__,false);canvas.removeEventListener('mousedown',canvas.__rgraph_mousedown_event_listener_installed__,false);canvas.removeEventListener('click',canvas.__rgraph_click_event_listener_installed__,false);}};RG.hidePalette=RG.HidePalette=function()\n{var div=RG.Registry.get('palette');if(typeof div=='object'&&div){div.style.visibility='hidden';div.style.display='none';RG.Registry.set('palette',null);}};RG.random=function(min,max)\n{var dp=arguments[2]?arguments[2]:0;var r=ma.random();return Number((((max-min)*r)+min).toFixed(dp));};RG.arrayRand=RG.arrayRandom=RG.random.array=function(num,min,max)\n{for(var i=0,arr=[];i<num;i+=1){arr.push(RG.random(min,max,arguments[3]));}\nreturn arr;};RG.noShadow=RG.NoShadow=function(obj)\n{var co=obj.context;co.shadowColor='rgba(0,0,0,0)';co.shadowBlur=0;co.shadowOffsetX=0;co.shadowOffsetY=0;};RG.setShadow=RG.SetShadow=function(obj,color,offsetx,offsety,blur)\n{var co=obj.context;co.shadowColor=color;co.shadowOffsetX=offsetx;co.shadowOffsetY=offsety;co.shadowBlur=blur;};RG.Registry.set=RG.Registry.Set=function(name,value)\n{name=name.replace(/([A-Z])/g,function(str)\n{return'.'+String(RegExp.$1).toLowerCase();});if(name.substr(0,6)!=='chart.'){name='chart.'+name;}\nRG.Registry.store[name]=value;return value;};RG.Registry.get=RG.Registry.Get=function(name)\n{name=name.replace(/([A-Z])/g,function(str)\n{return'.'+String(RegExp.$1).toLowerCase();});if(name.substr(0,6)!=='chart.'){name='chart.'+name;}\nreturn RG.Registry.store[name];};RG.degrees2Radians=function(deg)\n{return deg*(RG.PI/180);};RG.log=function(n,base)\n{return ma.log(n)/(base?ma.log(base):1);};RG.isArray=RG.is_array=function(obj)\n{if(obj&&obj.constructor){var pos=obj.constructor.toString().indexOf('Array');}else{return false;}\nreturn obj!=null&&typeof pos==='number'&&pos>0&&pos<20;};RG.trim=function(str)\n{return RG.ltrim(RG.rtrim(str));};RG.ltrim=function(str)\n{return str.replace(/^(\\s|\\0)+/,'');};RG.rtrim=function(str)\n{return str.replace(/(\\s|\\0)+$/,'');};RG.isNull=RG.is_null=function(arg)\n{if(arg==null||typeof arg==='object'&&!arg){return true;}\nreturn false;};RG.async=RG.Async=function(func)\n{return setTimeout(func,arguments[1]?arguments[1]:1);};RG.reset=RG.Reset=function(ca)\n{ca.width=ca.width;RG.ObjectRegistry.clear(ca);ca.__rgraph_aa_translated__=false;if(RG.text2.domNodeCache&&RG.text2.domNodeCache.reset){RG.text2.domNodeCache.reset(ca);}\nif(!RG.text2.domNodeCache){RG.text2.domNodeCache=[];}\nif(!RG.text2.domNodeDimensionCache){RG.text2.domNodeDimensionCache=[];}\nRG.text2.domNodeCache[ca.id]=[];RG.text2.domNodeDimensionCache[ca.id]=[];};RG.att=RG.attribution=function(obj)\n{var ca=obj.canvas,co=obj.context,prop=obj.properties;if(!ca||!co){return;}\nvar width=ca.width,height=ca.height,wrapper=document.getElementById('cvs').__object__.canvas.parentNode,text=prop['chart.attribution.text']||'Free Charts with RGraph.net',x=prop['chart.attribution.x'],y=prop['chart.attribution.y'],bold=prop['chart.attribution.bold'],italic=prop['chart.attribution.italic'],font=prop['chart.attribution.font']||'sans-serif',size=prop['chart.attribution.size']||8,underline=prop['chart.attribution.underline']?'underline':'none',color=typeof prop['chart.attribution.color']==='string'?prop['chart.attribution.color']:'',href=typeof prop['chart.attribution.href']==='string'?prop['chart.attribution.href']:'http://www.rgraph.net/canvas/index.html';if(wrapper.attribution_node){return;}\nvar measurements=RG.measureText(text,bold,font,size);var a=document.createElement('A');a.href=href;a.innerHTML=text;a.target='_blank';a.style.position='absolute';a.style.left=typeof x==='number'?x:wrapper.offsetWidth-measurements[0]-5+'px';a.style.top=typeof y==='number'?y:wrapper.offsetHeight-measurements[1]+'px';a.style.fontSize=size+'pt';a.style.fontStyle=typeof italic==='boolean'?(italic?'italic':''):'italic',a.style.fontWeight=bold?'bold':'',a.style.textDecoration=underline;a.style.fontFamily=font;a.style.color=color;wrapper.appendChild(a);wrapper.attribution_node=a;};RG.getCanvasTag=function(id)\n{id=typeof id==='object'?id.id:id;var canvas=doc.getElementById(id);return[id,canvas];};RG.Effects.updateCanvas=RG.Effects.UpdateCanvas=function(func)\n{win.requestAnimationFrame=win.requestAnimationFrame||win.webkitRequestAnimationFrame||win.msRequestAnimationFrame||win.mozRequestAnimationFrame||(function(func){setTimeout(func,16.666);});win.requestAnimationFrame(func);};RG.Effects.getEasingMultiplier=function(frames,frame)\n{return ma.pow(ma.sin((frame/frames)*RG.HALFPI),3);};RG.stringsToNumbers=function(str)\n{var sep=arguments[1]||',';if(typeof str==='number'){return str;}\nif(typeof str==='string'){if(str.indexOf(sep)!=-1){str=str.split(sep);}else{str=parseFloat(str);}}\nif(typeof str==='object'&&!RG.isNull(str)){for(var i=0,len=str.length;i<len;i+=1){str[i]=parseFloat(str[i]);}}\nreturn str;};RG.cachedDraw=function(obj,id,func)\n{if(!RG.cache[id]){RG.cache[id]={};RG.cache[id].object=obj;RG.cache[id].canvas=document.createElement('canvas');RG.cache[id].canvas.setAttribute('width',obj.canvas.width);RG.cache[id].canvas.setAttribute('height',obj.canvas.height);RG.cache[id].canvas.setAttribute('id','background_cached_canvas'+obj.canvas.id);RG.cache[id].canvas.__object__=obj;RG.cache[id].context=RG.cache[id].canvas.getContext('2d');RG.cache[id].context.translate(0.5,0.5);func(obj,RG.cache[id].canvas,RG.cache[id].context);}\nobj.context.drawImage(RG.cache[id].canvas,-0.5,-0.5);};RG.parseObjectStyleConfig=function(obj,config)\n{var recurse=function(obj,config,name,settings)\n{var i;for(key in config){if(key.match(/^exec[0-9]*$/)){(config[key])(obj,settings);continue;}\nvar isObject=false;var isArray=false;var value=config[key];while(key.match(/([A-Z])/)){key=key.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(!RG.isNull(value)&&value.constructor){isObject=value.constructor.toString().indexOf('Object')>0;isArray=value.constructor.toString().indexOf('Array')>0;}\nif(isObject&&!isArray){recurse(obj,config[key],name+'.'+key,settings);}else if(key==='self'){settings[name]=value;}else{settings[name+'.'+key]=value;}}\nreturn settings;};var settings=recurse(obj,config,'chart',{});for(key in settings){if(typeof key==='string'){obj.set(key,settings[key]);}}};RG.path2=function(co,p)\n{var args=arguments;if(typeof p==='string'){p=splitstring(p);}\nRG.path2.last=RG.arrayClone(p);for(var i=0,len=p.length;i<len;i+=1){switch(p[i]){case'b':co.beginPath();break;case'c':co.closePath();break;case'm':co.moveTo(parseFloat(p[i+1]),parseFloat(p[i+2]));i+=2;break;case'l':co.lineTo(parseFloat(p[i+1]),parseFloat(p[i+2]));i+=2;break;case's':if(p[i+1])co.strokeStyle=p[i+1];co.stroke();i++;break;case'f':if(p[i+1]){co.fillStyle=p[i+1];}co.fill();i++;break;case'qc':co.quadraticCurveTo(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]));i+=4;break;case'bc':co.bezierCurveTo(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]),parseFloat(p[i+6]));i+=6;break;case'r':co.rect(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]));i+=4;break;case'a':co.arc(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]),p[i+6]==='true'||p[i+6]===true||p[i+6]===1||p[i+6]==='1'?true:false);i+=6;break;case'at':co.arcTo(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]));i+=5;break;case'lw':co.lineWidth=parseFloat(p[i+1]);i++;break;case'e':co.ellipse(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]),parseFloat(p[i+6]),parseFloat(p[i+7]),p[i+8]==='true'?true:false);i+=8;break;case'lj':co.lineJoin=p[i+1];i++;break;case'lc':co.lineCap=p[i+1];i++;break;case'sc':co.shadowColor=p[i+1];i++;break;case'sb':co.shadowBlur=parseFloat(p[i+1]);i++;break;case'sx':co.shadowOffsetX=parseFloat(p[i+1]);i++;break;case'sy':co.shadowOffsetY=parseFloat(p[i+1]);i++;break;case'fs':co.fillStyle=p[i+1];i++;break;case'ss':co.strokeStyle=p[i+1];i++;break;case'fr':co.fillRect(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]));i+=4;break;case'sr':co.strokeRect(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]));i+=4;break;case'cl':co.clip();break;case'sa':co.save();break;case'rs':co.restore();break;case'tr':co.translate(parseFloat(p[i+1]),parseFloat(p[i+2]));i+=2;break;case'sl':co.scale(parseFloat(p[i+1]),parseFloat(p[i+2]));i+=2;break;case'ro':co.rotate(parseFloat(p[i+1]));i++;break;case'tf':co.transform(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]),parseFloat(p[i+6]));i+=6;break;case'stf':co.setTransform(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]),parseFloat(p[i+5]),parseFloat(p[i+6]));i+=6;break;case'cr':co.clearRect(parseFloat(p[i+1]),parseFloat(p[i+2]),parseFloat(p[i+3]),parseFloat(p[i+4]));i+=4;break;case'ld':var parts=p[i+1];co.setLineDash(parts);i+=1;break;case'ldo':co.lineDashOffset=p[i+1];i++;break;case'fo':co.font=p[i+1];i++;break;case'ft':co.fillText(p[i+1],parseFloat(p[i+2]),parseFloat(p[i+3]));i+=3;break;case'st':co.strokeText(p[i+1],parseFloat(p[i+2]),parseFloat(p[i+3]));i+=3;break;case'ta':co.textAlign=p[i+1];i++;break;case'tbl':co.textBaseline=p[i+1];i++;break;case'ga':co.globalAlpha=parseFloat(p[i+1]);i++;break;case'gco':co.globalCompositeOperation=p[i+1];i++;break;case'fu':(p[i+1])(co.canvas.__object__);i++;break;case'':break;default:alert('[ERROR] Unknown option: '+p[i]);}}\nfunction splitstring(p)\n{var ret=[],buffer='',inquote=false,quote='',substitutionIndex=2;for(var i=0;i<p.length;i+=1){var chr=p[i],isWS=chr.match(/ /);if(isWS){if(!inquote){if(buffer[0]==='\"'||buffer[0]===\"'\"){buffer=buffer.substr(1,buffer.length-2);}\nif(buffer.trim()==='%'&&typeof args[substitutionIndex]!=='undefined'){buffer=args[substitutionIndex++];}\nret.push(buffer);buffer='';}else{buffer+=chr;}}else{if(chr===\"'\"||chr==='\"'){inquote=!inquote;}\nbuffer+=chr;}}\nif(buffer.trim()==='%'&&args[substitutionIndex]){buffer=args[substitutionIndex++];}\nret.push(buffer);return ret;}};RG.wrap=function(){};})(window,document);window.$p=function(v)\n{RGraph.pr(arguments[0],arguments[1],arguments[3]);};window.$a=function(v)\n{alert(v);};window.$cl=function(v)\n{return console.log(v);};if(!String.prototype.format){String.prototype.format=function()\n{var args=arguments;return this.replace(/{(\\d+)}/g,function(str,idx)\n{return typeof args[idx-1]!=='undefined'?args[idx-1]:str;});};}"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.csv.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};if(!RGraph.AJAX)RGraph.AJAX=function(url,callback)\n{if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('GET',url,true);httpRequest.send();};if(!RGraph.AJAX.getString)RGraph.AJAX.getString=function(url,callback)\n{RGraph.AJAX(url,function()\n{var str=String(this.responseText);callback(str);});};if(!RGraph.createUID)RGraph.createUID=function()\n{return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c)\n{var r=Math.random()*16|0,v=c=='x'?r:(r&0x3|0x8);return v.toString(16);});};RGraph.CSV=function(url,func)\n{this.url=url;this.ready=func;this.data=null;this.numrows=null;this.numcols=null;this.seperator=arguments[2]||',';this.endofline=arguments[3]||/\\r?\\n/;this.uid=RGraph.createUID();this.splitCSV=function(str,split)\n{var arr=[];var field='';var inDoubleQuotes=false;var inSingleQuotes=false;var preserve=(typeof split==='object'&&split.preserve)?true:false;if(typeof split==='object'){if(typeof split.char==='string'){split=split.char;}else{split=',';}}\nfor(var i=0,len=str.length;i<len;i+=1){char=str.charAt(i);if((char==='\"')&&!inDoubleQuotes){inDoubleQuotes=true;continue;}else if((char==='\"')&&inDoubleQuotes){inDoubleQuotes=false;continue;}\nif((char===\"'\")&&!inSingleQuotes){inSingleQuotes=true;continue;}else if((char===\"'\")&&inSingleQuotes){inSingleQuotes=false;continue;}else if(char===split&&!inDoubleQuotes&&!inSingleQuotes){arr.push(field);field='';continue;}else{field=field+char;}}\narr.push(field);if(!preserve){for(i=0,len=arr.length;i<len;i+=1){arr[i]=arr[i].trim();}}\nreturn arr;};this.fetch=function()\n{var sep=this.seperator,eol=this.endofline,obj=this;if(this.url.substring(0,3)==='id:'||this.url.substring(0,4)==='str:'){if(this.url.substring(0,3)==='id:'){var data=document.getElementById(this.url.substring(3)).innerHTML.trim();}else if(this.url.substring(0,4)==='str:'){var data=this.url.substring(4).trim();}\nobj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}\nfor(var j=0;j<row.length;j+=1){if((/^\\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}\nobj.data[i]=row;}}\nobj.ready(obj);}else{RGraph.AJAX.getString(this.url,function(data)\n{data=data.replace(/(\\r?\\n)+$/,'');obj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}\nfor(var j=0;j<row.length;j+=1){if((/^\\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}\nobj.data[i]=row;}}\nobj.ready(obj);});}};this.getRow=function(index)\n{var row=[],start=parseInt(arguments[1])||0;row=this.data[index].slice(start);return row;};this.getCol=this.getColumn=function(index)\n{var col=[],start=arguments[1]||0;for(var i=start;i<this.data.length;i+=1){if(this.data[i]&&this.data[i][index]){col.push(this.data[i][index]);}else{col.push(null);}}\nreturn col;};this.fetch();};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.deprecated.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.text=RG.Text=function(context,font,size,x,y,text)\n{var args=arguments;if((typeof(text)!='string'&&typeof(text)!='number')||text=='undefined'){return;}\nif(typeof(text)=='string'&&text.match(/\\r\\n/)){var dimensions=RGraph.MeasureText('M',args[11],font,size);var arr=text.split('\\r\\n');if(args[6]&&args[6]=='center')y=(y-(dimensions[1]*((arr.length-1)/2)));for(var i=1;i<arr.length;++i){RGraph.Text(context,font,size,args[9]==-90?(x+(size*1.5)):x,y+(dimensions[1]*i),arr[i],args[6]?args[6]:null,args[7],args[8],args[9],args[10],args[11],args[12]);}\ntext=arr[0];}\nif(document.all&&RGraph.ISOLD){y+=2;}\ncontext.font=(args[11]?'Bold ':'')+size+'pt '+font;var i;var origX=x;var origY=y;var originalFillStyle=context.fillStyle;var originalLineWidth=context.lineWidth;if(typeof(args[6])=='undefined')args[6]='bottom';if(typeof(args[7])=='undefined')args[7]='left';if(typeof(args[8])=='undefined')args[8]=null;if(typeof(args[9])=='undefined')args[9]=0;if(navigator.userAgent.indexOf('Opera')!=-1){context.canvas.__rgraph_valign__=args[6];context.canvas.__rgraph_halign__=args[7];}\ncontext.save();context.canvas.__rgraph_originalx__=x;context.canvas.__rgraph_originaly__=y;context.translate(x,y);x=0;y=0;if(args[9]){context.rotate(args[9]/(180/RGraph.PI));}\nif(args[6]){var vAlign=args[6];if(vAlign=='center'){context.textBaseline='middle';}else if(vAlign=='top'){context.textBaseline='top';}}\nif(args[7]){var hAlign=args[7];var width=context.measureText(text).width;if(hAlign){if(hAlign=='center'){context.textAlign='center';}else if(hAlign=='right'){context.textAlign='right';}}}\ncontext.fillStyle=originalFillStyle;context.save();context.fillText(text,0,0);context.lineWidth=1;var width=context.measureText(text).width;var width_offset=(hAlign=='center'?(width/2):(hAlign=='right'?width:0));var height=size*1.5;var height_offset=(vAlign=='center'?(height/2):(vAlign=='top'?height:0));var ieOffset=RGraph.ISOLD?2:0;if(args[8]){context.strokeRect(-3-width_offset,0-3-height-ieOffset+height_offset,width+6,height+6);if(args[10]){context.fillStyle=args[10];context.fillRect(-3-width_offset,0-3-height-ieOffset+height_offset,width+6,height+6);}\ncontext.fillStyle=originalFillStyle;context.fillText(text,0,0);}\ncontext.restore();context.lineWidth=originalLineWidth;context.restore();};RG.getMouseXY=function(e)\n{var el=(RGraph.ISOLD?event.srcElement:e.target);var x;var y;var paddingLeft=el.style.paddingLeft?parseInt(el.style.paddingLeft):0;var paddingTop=el.style.paddingTop?parseInt(el.style.paddingTop):0;var borderLeft=el.style.borderLeftWidth?parseInt(el.style.borderLeftWidth):0;var borderTop=el.style.borderTopWidth?parseInt(el.style.borderTopWidth):0;if(RGraph.ISIE8)e=event;if(typeof(e.offsetX)=='number'&&typeof(e.offsetY)=='number'){x=e.offsetX;y=e.offsetY;}else{x=0;y=0;while(el!=document.body&&el){x+=el.offsetLeft;y+=el.offsetTop;el=el.offsetParent;}\nx=e.pageX-x;y=e.pageY-y;}\nreturn[x,y];};RG.oldBrowserCompat=RG.OldBrowserCompat=function(co)\n{if(!co){return;}\nif(!co.measureText){co.measureText=function(text)\n{var textObj=document.createElement('DIV');textObj.innerHTML=text;textObj.style.position='absolute';textObj.style.top='-100px';textObj.style.left=0;document.body.appendChild(textObj);var width={width:textObj.offsetWidth};textObj.style.display='none';return width;}}\nif(!co.fillText){co.fillText=function(text,targetX,targetY)\n{return false;}}\nif(!co.canvas.addEventListener){window.addEventListener=function(ev,func,bubble)\n{return this.attachEvent('on'+ev,func);}\nco.canvas.addEventListener=function(ev,func,bubble)\n{return this.attachEvent('on'+ev,func);}}};RG.each=function(arr,func)\n{for(var i=0,len=arr.length;i<len;i+=1){if(typeof arguments[2]!=='undefined'){var ret=func.call(arguments[2],i,arr[i]);}else{var ret=func.call(arr,i,arr[i]);}\nif(ret===false){return;}}};RG.getHeight=RG.GetHeight=function(obj)\n{return obj.canvas.height;};RG.getWidth=RG.GetWidth=function(obj)\n{return obj.canvas.width;};RG.timer=RG.Timer=function(label)\n{if(typeof RG.TIMER_LAST_CHECKPOINT=='undefined'){RG.TIMER_LAST_CHECKPOINT=Date.now();}\nvar now=Date.now();console.log(label+': '+(now-RG.TIMER_LAST_CHECKPOINT).toString());RG.TIMER_LAST_CHECKPOINT=now;};RG.setConfig=RG.SetConfig=function(obj,config)\n{for(i in config){if(typeof i==='string'){obj.Set(i,config[i]);}}\nreturn obj;};})(window,document);window.$empty=function(value)\n{if(!value||value.length<=0){return true;}\nreturn false;};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.dynamic.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.installWindowMousedownListener=RG.InstallWindowMousedownListener=function(obj)\n{if(!RG.window_mousedown_event_listener){RG.window_mousedown_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)win.event=e;e=RG.fixEventObject(e);if(RG.HideTooltip&&RG.Registry.Get('chart.tooltip')){RG.clear(RG.Registry.Get('chart.tooltip').__canvas__);RG.redraw();RG.hideTooltip();}};win.addEventListener('mousedown',RG.window_mousedown_event_listener,false);}};RG.installWindowMouseupListener=RG.InstallWindowMouseupListener=function(obj)\n{if(!RG.window_mouseup_event_listener){RG.window_mouseup_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)win.event=e;e=RG.fixEventObject(e);if(RG.annotating_window_onmouseup){RG.annotating_window_onmouseup(e);return;}\nif(RG.Registry.Get('chart.adjusting')||RG.Registry.Get('chart.adjusting.gantt')){var obj=RG.Registry.Get('chart.adjusting');if(obj&&obj.type==='line'){obj.data_arr=RG.arrayLinearize(obj.data);}\nRG.fireCustomEvent(RG.Registry.Get('chart.adjusting'),'onadjustend');}\nRG.Registry.set('chart.adjusting',null);RG.Registry.set('chart.adjusting.shape',null);RG.Registry.set('chart.adjusting.gantt',null);var tags=document.getElementsByTagName('canvas');for(var i=0;i<tags.length;++i){if(tags[i].__object__&&tags[i].__object__.isRGraph){if(!tags[i].__object__.get('chart.annotatable')){if(!tags[i].__rgraph_trace_cover__&&!noredraw){RG.clear(tags[i]);}else{var noredraw=true;}}}}\nif(!noredraw){RG.redraw();}};win.addEventListener('mouseup',RG.window_mouseup_event_listener,false);}};RG.installCanvasMouseupListener=RG.InstallCanvasMouseupListener=function(obj)\n{if(!obj.canvas.rgraph_mouseup_event_listener){obj.canvas.rgraph_mouseup_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)window.event=e;e=RG.fixEventObject(e);var objects=RG.ObjectRegistry.getObjectsByXY(e);if(objects){for(var i=0,len=objects.length;i<len;i+=1){var obj=objects[i],id=objects[i].id;var link=obj.Get('link');if(obj.type=='drawing.text'&&typeof link==='string'){var link_target=obj.get('link.target');var link_options=obj.get('link.options');window.open(link,link_target?link_target:null,link_options);}\nif(!RG.isNull(obj)&&RG.tooltip){var shape=obj.getShape(e);if(shape&&shape['tooltip']){var text=shape['tooltip'];if(text){var type=shape['object'].type;RG.clear(obj.canvas);RG.redraw();RG.Registry.set('chart.tooltip.shape',shape);RG.tooltip(obj,text,0,0,shape['index'],e);obj.highlight(shape);if(RG.Registry.get('chart.tooltip')){RG.Registry.get('chart.tooltip').__shape__=shape;RG.evaluateCursor(e);}\ne.cancelBubble=true;e.stopPropagation();return false;}}}\nif(RG.Registry.get('chart.adjusting')||RG.Registry.get('chart.adjusting.gantt')){if(obj&&obj.type==='line'){obj.data_arr=RG.arrayLinearize(obj.data);}\nRG.fireCustomEvent(RG.Registry.get('chart.adjusting'),'onadjustend');}\nRG.Registry.set('chart.adjusting',null);RG.Registry.set('chart.adjusting.shape',null);RG.Registry.set('chart.adjusting.gantt',null);if(shape||(obj.overChartArea&&obj.overChartArea(e))){break;}}}};obj.canvas.addEventListener('mouseup',obj.canvas.rgraph_mouseup_event_listener,false);}};RG.installCanvasMousemoveListener=RG.InstallCanvasMousemoveListener=function(obj)\n{if(!obj.canvas.rgraph_mousemove_event_listener){obj.canvas.rgraph_mousemove_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)window.event=e;e=RG.fixEventObject(e);var objects=RG.OR.getObjectsByXY(e);var uids=[];if(objects&&objects.length>0){for(var i=0,len=objects.length;i<len;i+=1){var obj=objects[i];var id=obj.id;uids[obj.uid]=true;if(!obj.getShape){continue;}\nvar shape=obj.getShape(e);if(RG.last_mouseover_uid&&RG.last_mouseover_uid!==obj.uid){RG.fireCustomEvent(RG.last_mouseover_object,'onmouseout');RG.last_mouseover_object.__mouseover_shape_index__=null;RG.last_mouseover_object.__mouseover_shape__=null;RG.last_mouseover_object=null;RG.last_mouseover_uid=null;}\nif((!shape&&typeof obj.__mouseover_shape_index__==='number')||(shape&&typeof obj.__mouseover_shape_index__==='number'&&shape.index!==obj.__mouseover_shape_index__)){RG.fireCustomEvent(obj,'onmouseout');}\nif(obj.coords&&obj.coords.key&&obj.coords.key.length){var mouseXY=RG.getMouseXY(e);for(var i=0,overkey=false;i<obj.coords.key.length;++i){if(mouseXY[0]>=obj.coords.key[i][0]&&mouseXY[0]<=(obj.coords.key[i][0]+obj.coords.key[i][2])&&mouseXY[1]>=obj.coords.key[i][1]&&mouseXY[1]<=(obj.coords.key[i][1]+obj.coords.key[i][3])){RG.Registry.set('key-element',obj.coords.key[i]);overkey=true;}\nif(!overkey){RG.Registry.set('key-element',null);}}}\nvar func=obj.get('chart.events.mousemove');if(!func&&typeof obj.onmousemove=='function'){var func=obj.onmousemove;}\nif(shape){var index=shape['object'].type=='scatter'?shape['index_adjusted']:shape['index'];if(typeof(obj['$'+index])=='object'&&typeof(obj['$'+index].onmousemove)=='function'){var func2=obj['$'+index].onmousemove;}}\nif(shape&&(typeof(func)=='function'||typeof(func2)=='function'||typeof obj.Get('link')==='string')){if(obj.Get('chart.events.mousemove.revertto')==null){obj.Set('chart.events.mousemove.revertto',e.target.style.cursor);}\nif(typeof(func)=='function')RGraph.custom_events_mousemove_pointer=func(e,shape);if(typeof(func2)=='function')RGraph.custom_events_mousemove_pointer=RGraph.custom_events_mousemove_pointer||func2(e,shape);if(typeof RG.events==='object'&&typeof RG.events[obj.uid]==='object'){for(i in RG.events[obj.uid]){if(typeof i==='string'&&typeof RG.events[obj.uid][i]==='object'&&RG.events[obj.uid][i][1]==='onmousemove'&&typeof RG.events[obj.uid][i][2]==='function'){(RG.events[obj.uid][i][2])(obj);}}}}else if(typeof(obj.Get('chart.events.mousemove.revertto'))=='string'){RG.cursor.push('default');obj.Set('chart.events.mousemove.revertto',null);}\nvar func=obj.properties['chart.events.mouseover'];if(!func&&typeof obj.onmouseover==='function'){func=obj.onmouseover;}\nif(shape){var index=shape['object'].type=='scatter'?shape['index_adjusted']:shape['index'];if(typeof(obj['$'+index])=='object'&&typeof(obj['$'+index].onmouseover)=='function'){var func2=obj['$'+index].onmouseover;}}else{obj.__mouseover_shape_index__=null;RG.__mouseover_objects__=[];RG.last_mouseover_uid=null;RG.last_mouseover_object=null;}\nif(typeof RG.__mouseover_objects__==='undefined'){RG.__mouseover_objects__=[];RG.last_mouseover_uid=null;RG.last_mouseover_object=null;}\nif(shape){if((obj.__mouseover_shape_index__===shape.index)===false){obj.__mouseover_shape__=shape;obj.__mouseover_shape_index__=shape.index;RG.last_mouseover_uid=obj.uid;RG.last_mouseover_object=obj;RG.__mouseover_objects__.push(obj);if(func)func(e,shape);if(func2)func2(e,shape);if(typeof RG.events==='object'&&typeof RG.events[obj.uid]==='object'){for(i in RG.events[obj.uid]){if(typeof i==='string'&&typeof RG.events[obj.uid][i]==='object'&&RG.events[obj.uid][i][1]==='onmouseover'&&typeof RG.events[obj.uid][i][2]==='function'){(RG.events[obj.uid][i][2])(obj);}}}}}else{obj.__mouseover_shape_index__=null;RG.__mouseover_objects__=[];RG.last_mouseover_uid=null;RG.last_mouseover_object=null;}\nvar current_tooltip=RG.Registry.get('chart.tooltip');var tooltips=obj.get('chart.tooltips');var tooltips_event=obj.Get('chart.tooltips.event');if(shape&&(tooltips&&tooltips[shape['index']]||shape['tooltip'])&&tooltips_event.indexOf('mousemove')!==-1&&(RG.isNull(current_tooltip)||obj.uid!=current_tooltip.__object__.uid||(current_tooltip.__index__!=shape['index'])||(typeof shape['dataset']==='number'&&shape['dataset']!=current_tooltip.__shape__['dataset']))){RG.clear(obj.canvas);RG.hideTooltip();RG.redraw();obj.canvas.rgraph_mouseup_event_listener(e);return;}\nif(obj&&obj.get('chart.adjustable')){obj.Adjusting_mousemove(e);}\nif(shape||(obj.overChartArea&&obj.overChartArea(e))){break;}}\nvar objects=RG.OR.getObjectsByCanvasID(e.target.id);for(var i=0;i<objects.length;++i){if(!uids[objects[i].uid]){objects[i].__mouseover_shape_index__=null;}}}else{var objects=RG.OR.getObjectsByCanvasID(e.target.id);for(var i=0;i<objects.length;i++){if(typeof objects[i].__mouseover_shape_index__==='number'){RG.fireCustomEvent(objects[i],'onmouseout');}\nobjects[i].__mouseover_shape_index__=null;}\nRG.__mouseover_objects__=[];RG.last_mouseover_uid=null;RG.last_mouseover_object=null;}\nif(e.target&&e.target.__object__&&e.target.__object__.get('chart.crosshairs')){RG.drawCrosshairs(e,e.target.__object__);}\nif(e.target.__object__&&e.target.__object__.get('chart.annotatable')&&RG.annotating_canvas_onmousemove){RG.annotating_canvas_onmousemove(e);}\nRG.evaluateCursor(e);};obj.canvas.addEventListener('mousemove',obj.canvas.rgraph_mousemove_event_listener,false);}};RG.installCanvasMousedownListener=RG.InstallCanvasMousedownListener=function(obj)\n{if(!obj.canvas.rgraph_mousedown_event_listener){obj.canvas.rgraph_mousedown_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)window.event=e;e=RG.fixEventObject(e);if(e.target.__object__&&e.target.__object__.get('chart.annotatable')&&RG.annotating_canvas_onmousedown){RG.annotating_canvas_onmousedown(e);return;}\nvar obj=RG.ObjectRegistry.getObjectByXY(e);if(obj){var id=obj.id;if(obj&&obj.isRGraph&&obj.get('chart.adjustable')){var obj=RG.OR.getObjectByXY(e);if(obj&&obj.isRGraph){switch(obj.type){case'bar':var shape=obj.getShapeByX(e);break;case'gantt':var shape=obj.getShape(e);var data=typeof shape.subindex==='number'?obj.data[shape.index][shape.subindex]:obj.data[shape.index];if(shape){var mouseXY=RG.getMouseXY(e);RG.Registry.set('chart.adjusting.gantt',{index:shape.index,subindex:shape.subindex,object:obj,mousex:mouseXY[0],mousey:mouseXY[1],event:data,event_start:data.start,event_duration:data.duration,mode:(mouseXY[0]>(shape['x']+shape['width']-5)?'resize':'move'),shape:shape});}\nbreak;case'line':var shape=obj.getShape(e);break;case'hbar':var shape=obj.getShapeByY(e);break;default:var shape=null;}\nif(RG.isNull(obj.properties['chart.adjustable.only'])||typeof obj.properties['chart.adjustable.only']==='undefined'||(RG.isArray(obj.properties['chart.adjustable.only'])&&obj.isAdjustable&&obj.isAdjustable(shape))){RG.Registry.set('chart.adjusting.shape',shape);RG.fireCustomEvent(obj,'onadjustbegin');RG.Registry.set('chart.adjusting',obj);RG.clear(obj.canvas);RG.redraw();obj.canvas.rgraph_mousemove_event_listener(e);}}}\nRG.clear(obj.canvas);RG.redraw();}};obj.canvas.addEventListener('mousedown',obj.canvas.rgraph_mousedown_event_listener,false);}};RG.installCanvasClickListener=RG.InstallCanvasClickListener=function(obj)\n{if(!obj.canvas.rgraph_click_event_listener){obj.canvas.rgraph_click_event_listener=function(e)\n{if(navigator.userAgent.indexOf('Firefox')>=0)window.event=e;e=RG.fixEventObject(e);var objects=RG.ObjectRegistry.getObjectsByXY(e);for(var i=0,len=objects.length;i<len;i+=1){var obj=objects[i];var id=obj.id;var shape=obj.getShape(e);var func=obj.get('chart.events.click');if(!func&&typeof(obj.onclick)=='function'){func=obj.onclick;}\nif(shape&&typeof func=='function'){func(e,shape);if(typeof RG.events==='object'&&typeof RG.events[obj.uid]==='object'){for(i in RG.events[obj.uid]){if(typeof i==='string'&&typeof RG.events[obj.uid][i]==='object'&&RG.events[obj.uid][i][1]==='onclick'&&typeof RG.events[obj.uid][i][2]==='function'){(RG.events[obj.uid][i][2])(obj);}}}\nreturn;}\nvar key=RG.Registry.get('key-element');if(key){RG.fireCustomEvent(obj,'onkeyclick');}\nif(shape){var index=shape['object'].type=='scatter'?shape['index_adjusted']:shape['index'];if(typeof(index)=='number'&&obj['$'+index]){var func=obj['$'+index].onclick;if(typeof(func)=='function'){func(e,shape);return;}}}\nif(shape||(obj.overChartArea&&obj.overChartArea(e))){break;}}};obj.canvas.addEventListener('click',obj.canvas.rgraph_click_event_listener,false);}};RG.evaluateCursor=RG.EvaluateCursor=function(e)\n{if(e.rgraph_evaluateCursor===false){return;}\nvar obj=null;var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var canvas=e.target;var objects=RG.OR.getObjectsByCanvasID(canvas.id);for(var i=0,len=objects.length;i<len;i+=1){if((objects[i].getShape&&objects[i].getShape(e))||(objects[i].overChartArea&&objects[i].overChartArea(e))){var obj=objects[i];var id=obj.id;}}\nif(!RG.isNull(obj)){if(obj.getShape&&obj.getShape(e)){var shape=obj.getShape(e);if(obj.get('chart.tooltips')){var text=RG.parseTooltipText(obj.get('chart.tooltips'),shape['index']);if(!text&&shape['object'].type=='scatter'&&shape['index_adjusted']){text=RG.parseTooltipText(obj.get('chart.tooltips'),shape['index_adjusted']);}\nif(text){var pointer=true;}}}\nif(!RG.isNull(obj)&&obj.Get('chart.key.interactive')){for(var j=0;j<obj.coords.key.length;++j){if(mouseX>obj.coords.key[j][0]&&mouseX<(obj.coords.key[j][0]+obj.coords.key[j][2])&&mouseY>obj.coords.key[j][1]&&mouseY<(obj.coords.key[j][1]+obj.coords.key[j][3])){var pointer=true;}}}}\nif(RGraph.custom_events_mousemove_pointer){var pointer=true;RGraph.custom_events_mousemove_pointer=false;}\nvar objects=RG.OR.objects.byCanvasID;for(var i=0,len=objects.length;i<len;i+=1){if(objects[i]&&objects[i][1].Get('chart.resizable')){var resizable=true;}}\nif(resizable&&mouseX>(e.target.width-32)&&mouseY>(e.target.height-16)){pointer=true;}\nif(pointer){e.target.style.cursor='pointer';}else if(e.target.style.cursor=='pointer'){e.target.style.cursor='default';}else{e.target.style.cursor=null;}\nif(resizable&&mouseX>=(e.target.width-15)&&mouseY>=(e.target.height-15)){e.target.style.cursor='move';}else if(e.target.style.cursor==='move'){e.target.style.cursor='default';}\nif(typeof mouse_over_key=='boolean'&&mouse_over_key){e.target.style.cursor='pointer';}\nif(obj&&obj.type=='line'&&obj.get('chart.adjustable')){if(obj.getShape){var shape=obj.getShape(e);if(shape&&obj.isAdjustable(shape)){e.target.style.cursor='ns-resize';}}else{e.target.style.cursor='default';}}\nif(e.target.__object__&&e.target.__object__.get('chart.annotatable')){e.target.style.cursor='crosshair';}\nif(obj&&obj.type==='drawing.text'&&shape&&typeof obj.get('link')==='string'){e.target.style.cursor='pointer';}};RG.parseTooltipText=function(tooltips,idx)\n{if(!tooltips){return null;}\nif(typeof tooltips=='function'){var text=tooltips(idx);}else if(typeof tooltips=='string'){var text=tooltips;}else if(typeof tooltips=='object'&&typeof tooltips[idx]=='function'){var text=tooltips[idx](idx);}else if(typeof tooltips[idx]=='string'&&tooltips[idx]){var text=tooltips[idx];}else{var text='';}\nif(text=='undefined'){text='';}else if(text=='null'){text='';}\nreturn RG.getTooltipTextFromDIV?RG.getTooltipTextFromDIV(text):text;};RG.drawCrosshairs=RG.DrawCrosshairs=function(e,obj)\n{var e=RG.fixEventObject(e),width=obj.canvas.width,height=obj.canvas.height,mouseXY=RG.getMouseXY(e),x=mouseXY[0],y=mouseXY[1],gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,Mathround=Math.round,prop=obj.properties,co=obj.context,ca=obj.canvas\nRG.redrawCanvas(ca);if(x>=gutterLeft&&y>=gutterTop&&x<=(width-gutterRight)&&y<=(height-gutterBottom)){var linewidth=prop['chart.crosshairs.linewidth']?prop['chart.crosshairs.linewidth']:1;co.lineWidth=linewidth?linewidth:1;co.beginPath();co.strokeStyle=prop['chart.crosshairs.color'];if(prop['chart.crosshairs.snap']){var point=null;var dist=null;var len=null;if(obj.type=='line'){for(var i=0;i<obj.coords.length;++i){var length=RG.getHypLength(obj.coords[i][0],obj.coords[i][1],x,y);if(typeof dist!='number'||length<dist){var point=i;var dist=length;}}\nx=obj.coords[point][0];y=obj.coords[point][1];for(var dataset=0;dataset<obj.coords2.length;++dataset){for(var point=0;point<obj.coords2[dataset].length;++point){if(obj.coords2[dataset][point][0]==x&&obj.coords2[dataset][point][1]==y){ca.__crosshairs_snap_dataset__=dataset;ca.__crosshairs_snap_point__=point;}}}}else{for(var i=0;i<obj.coords.length;++i){for(var j=0;j<obj.coords[i].length;++j){var len=RG.getHypLength(obj.coords[i][j][0],obj.coords[i][j][1],x,y);if(typeof(dist)!='number'||len<dist){var dataset=i;var point=j;var dist=len;}}}\nca.__crosshairs_snap_dataset__=dataset;ca.__crosshairs_snap_point__=point;x=obj.coords[dataset][point][0];y=obj.coords[dataset][point][1];}}\nif(prop['chart.crosshairs.vline']){co.moveTo(Mathround(x),Mathround(gutterTop));co.lineTo(Mathround(x),Mathround(height-gutterBottom));}\nif(prop['chart.crosshairs.hline']){co.moveTo(Mathround(gutterLeft),Mathround(y));co.lineTo(Mathround(width-gutterRight),Mathround(y));}\nco.stroke();if(obj.type=='scatter'&&prop['chart.crosshairs.coords']){var xCoord=(((x-gutterLeft)/(width-gutterLeft-gutterRight))*(prop['chart.xmax']-prop['chart.xmin']))+prop['chart.xmin'];xCoord=xCoord.toFixed(prop['chart.scale.decimals']);var yCoord=obj.max-(((y-prop['chart.gutter.top'])/(height-gutterTop-gutterBottom))*obj.max);if(obj.type=='scatter'&&obj.properties['chart.xaxispos']=='center'){yCoord=(yCoord-(obj.max/2))*2;}\nyCoord=yCoord.toFixed(prop['chart.scale.decimals']);var div=RG.Registry.get('chart.coordinates.coords.div');var mouseXY=RG.getMouseXY(e);var canvasXY=RG.getCanvasXY(ca);if(!div){var div=document.createElement('DIV');div.__object__=obj;div.style.position='absolute';div.style.backgroundColor='white';div.style.border='1px solid black';div.style.fontFamily='Arial, Verdana, sans-serif';div.style.fontSize='10pt'\ndiv.style.padding='2px';div.style.opacity=1;div.style.WebkitBorderRadius='3px';div.style.borderRadius='3px';div.style.MozBorderRadius='3px';document.body.appendChild(div);RG.Registry.set('chart.coordinates.coords.div',div);}\ndiv.style.opacity=1;div.style.display='inline';if(!prop['chart.crosshairs.coords.fixed']){div.style.left=ma.max(2,(e.pageX-div.offsetWidth-3))+'px';div.style.top=ma.max(2,(e.pageY-div.offsetHeight-3))+'px';}else{div.style.left=canvasXY[0]+gutterLeft+3+'px';div.style.top=canvasXY[1]+gutterTop+3+'px';}\nif(typeof prop['chart.crosshairs.coords.formatter.x']==='function'){xCoord=(prop['chart.crosshairs.coords.formatter.x'])({object:obj,value:parseInt(xCoord)});}\nif(typeof prop['chart.crosshairs.coords.formatter.y']==='function'){yCoord=(prop['chart.crosshairs.coords.formatter.y'])({object:obj,value:parseInt(yCoord)});}\ndiv.innerHTML='<span style=\"color: #666\">'+prop['chart.crosshairs.coords.labels.x']+':</span> '+xCoord+'<br><span style=\"color: #666\">'+prop['chart.crosshairs.coords.labels.y']+':</span> '+yCoord;obj.canvas.addEventListener('mouseout',RG.hideCrosshairCoords,false);ca.__crosshairs_labels__=div;ca.__crosshairs_x__=xCoord;ca.__crosshairs_y__=yCoord;}else if(prop['chart.crosshairs.coords']){alert('[RGRAPH] Showing crosshair coordinates is only supported on the Scatter chart');}\nRG.fireCustomEvent(obj,'oncrosshairs');}else{RG.hideCrosshairCoords();}};RG.allowSegmentHighlight=function(opt)\n{var obj=opt.object,count=opt.count,fill=opt.fill,stroke=opt.stroke\nif(!RG.segmentHighlightFunction){RG.segmentHighlightFunction=function(e)\n{var mouseXY=RG.getMouseXY(e);var angle=RG.getAngleByXY(obj.centerx,obj.centery,mouseXY[0],mouseXY[1]);angle+=RG.HALFPI;if(angle>RG.TWOPI){angle-=RG.TWOPI;}\nRG.redraw();var start=0;var end=0;var a=(ma.PI*2)/count;var r=obj.radius;(function()\n{for(i=0;i<count;i+=1){if(angle<(a*(i+1))){start=i*a;end=(i+1)*a;return;}}})();start-=RG.HALFPI;end-=RG.HALFPI;RG.path2(obj.context,'b m % % a % % % % % false c s % f %',obj.centerx,obj.centery,obj.centerx,obj.centery,r,start,end,stroke,fill);};obj.canvas.addEventListener('mousemove',RG.segmentHighlightFunction,false);}}})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.effects.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Effects=RGraph.Effects||{};RGraph.Effects.Common={};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.Effects.decorate=function(obj)\n{for(i in RG.Effects.Common){if(typeof RG.Effects.Common[i]==='function'){obj[i]=RG.Effects.Common[i];}}};RG.Effects.replaceCanvasWithDIV=RG.Effects.ReplaceCanvasWithDIV=RG.Effects.wrap=function(canvas)\n{if(!canvas.rgraph_wrapper){var div=$('<div></div>').css({width:canvas.width+'px',height:canvas.height+'px',cssFloat:canvas.style.cssFloat,left:canvas.style.left,top:canvas.style.top,display:'inline-block'}).get(0);canvas.parentNode.insertBefore(div,canvas);canvas.parentNode.removeChild(canvas);div.appendChild(canvas);canvas.style.position='relative';canvas.style.left=(div.offsetWidth/2)+'px';canvas.style.top=(div.offsetHeight/2)+'px';canvas.style.cssFloat='';canvas.rgraph_wrapper=div;}\nvar div=canvas.rgraph_wrapper;return div;};RG.Effects.Common.fadeIn=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};obj.canvas.style.opacity=0;RG.redrawCanvas(obj.canvas);for(var i=1;i<=frames;++i){(function(index)\n{setTimeout(function()\n{obj.canvas.style.opacity=(index/frames);if(index>=frames){callback(obj);}},(index/frames)*duration);})(i)}\nreturn obj;};RG.Effects.Common.fadeOut=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};for(var i=1;i<=frames;++i){(function(index)\n{setTimeout(function()\n{obj.canvas.style.opacity=1-(index/frames);if(index>=frames){callback(obj);}},(index/frames)*duration);})(i)}\nreturn this;};RG.Effects.Common.fadeSlideIn=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||30,frame=0,pc=-20,step=(120-pc)/frames,canvasXY=RG.getCanvasXY(obj.canvas),color=opt.color||'white',callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'linear-gradient(135deg, rgba(255,255,255,0) '+pc+'%, '+color+' '+(pc+20)+'%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1]+'px',left:canvasXY[0]+'px',position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(pc<120){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'linear-gradient(135deg, rgba(255,255,255,0) '+pc+'%, '+color+' '+(pc+20)+'%)'});pc+=step;RG.Effects.updateCanvas(iterator);}else{$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.fadeSlideOut=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var pc=-20;var step=(120-pc)/frames;var canvasXY=RG.getCanvasXY(obj.canvas);var color=opt.color||'white';var callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'linear-gradient(135deg, '+color+' '+pc+'%, rgba(255,255,255,0) '+(pc+20)+'%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1]+'px',left:canvasXY[0]+'px',position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(pc<120){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'linear-gradient(135deg, '+color+' '+pc+'%, rgba(255,255,255,0) '+(pc+20)+'%)'});pc+=step;RG.Effects.updateCanvas(iterator);}else{RG.clear(obj.canvas,obj.get('clearto'))\n$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.fadeCircularInOutwards=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||120;var frame=0;var radius=0;var canvasXY=RG.getCanvasXY(obj.canvas);var color=opt.color||'white';var callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, white '+radius+'%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1],left:canvasXY[0],position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient(rgba(255,255,255,0) '+((frame++/ frames) * 100) + '%, ' + color + ' ' + ((frame++ /frames)*150)+'%)'});RG.Effects.updateCanvas(iterator);}else{$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.fadeCircularOutOutwards=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||120;var frame=0;var canvasXY=RG.getCanvasXY(obj.canvas);var color=opt.color||'white';var callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, white 0%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1],left:canvasXY[0],position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient('+color+' '+((frame++/ frames) * 100) + '%, rgba(255,255,255,0) ' + ((frame++ /frames)*150)+'%)'});RG.Effects.updateCanvas(iterator);}else{RG.clear(obj.canvas,color);$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.fadeCircularInInwards=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||120;var frame=0;var radius=ma.max(obj.canvas.width,obj.canvas.height);var canvasXY=RG.getCanvasXY(obj.canvas);var color=opt.color||'white';var callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 100%, rgba(255,255,255,0) 0%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1]+'px',left:canvasXY[0]+'px',position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient('+color+' '+(((frames-frame++)/frames)*100)+'%, rgba(255,255,255,0) '+(((frames-frame++)/frames)*120)+'%)'});RG.Effects.updateCanvas(iterator);}else{$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.fadeCircularOutInwards=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||120;var frame=0;var radius=ma.max(obj.canvas.width,obj.canvas.height);var canvasXY=RG.getCanvasXY(obj.canvas);var color=opt.color||'white';var callback=arguments[1]||function(){};RG.redrawCanvas(obj.canvas);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, rgba(255,255,255,0) 0%)',width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:canvasXY[1],left:canvasXY[0],position:'absolute'}).appendTo($(obj.canvas.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient(rgba(255,255,255,0) '+(((frames-frame++)/frames)*100)+'%, '+color+' '+(((frames-frame++)/frames)*120)+'%)'});RG.Effects.updateCanvas(iterator);}else{RG.clear(obj.canvas);$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();};RG.Effects.Common.expand=function()\n{var obj=this;var opt=arguments[0]||{};var bounce=typeof opt.bounce==='boolean'?opt.bounce:true;var frames=opt.frames||60;var duration=(frames/60)*1000;var callback=arguments[1]||function(){};if(!this.canvas.rgraph_wrapper){var div=RG.Effects.wrap(this.canvas);this.canvas.rgraph_wrapper=div;}else{div=this.canvas.rgraph_wrapper;}\ndiv.style.position='relative';this.canvas.style.top=(this.canvas.height/2)+'px';this.canvas.style.left=(this.canvas.width/2)+'px';this.canvas.style.width=0;this.canvas.style.height=0;this.canvas.style.opacity=0;RG.clear(this.canvas);RG.redrawCanvas(this.canvas);if(bounce){jQuery('#'+obj.id).animate({opacity:1,width:(obj.canvas.width*1.2)+'px',height:(obj.canvas.height*1.2)+'px',left:(obj.canvas.width* -0.1)+'px',top:(obj.canvas.height* -0.1)+'px'},duration*0.5,function()\n{jQuery('#'+obj.id).animate({width:(obj.canvas.width*0.9)+'px',height:(obj.canvas.height*0.9)+'px',top:(obj.canvas.height*0.05)+'px',left:(obj.canvas.width*0.05)+'px'},duration*0.25,function()\n{jQuery('#'+obj.id).animate({width:obj.canvas.width+'px',height:obj.canvas.height+'px',top:0,left:0},duration*0.25,function(){callback(obj);});});});}else{jQuery(obj.canvas).animate({opacity:1,width:obj.canvas.width+'px',height:obj.canvas.height+'px',left:0,top:0},duration,function(){callback(obj);})}\nreturn this;};RG.Effects.Common.contract=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var callback=arguments[1]||function(){};if(!obj.canvas.rgraph_wrapper){var div=RG.Effects.wrap(obj.canvas);obj.canvas.rgraph_wrapper=div;}else{div=obj.canvas.rgraph_wrapper;}\ndiv.style.position='relative';obj.canvas.style.top=0;obj.canvas.style.left=0;if(opt.bounce!==false){jQuery('#'+obj.id).animate({width:(obj.canvas.width*1.2)+'px',height:(obj.canvas.height*1.2)+'px',left:(obj.canvas.width* -0.1)+'px',top:(obj.canvas.height* -0.1)+'px'},duration*0.25,function()\n{jQuery('#'+obj.id).animate({opacity:0,width:0,height:0,left:(obj.canvas.width*0.5)+'px',top:(obj.canvas.height*0.5)+'px'},duration*0.75,function(){callback(obj);});});}else{jQuery('#'+obj.id).animate({opacity:0,width:0,height:0,left:(obj.canvas.width*0.5)+'px',top:(obj.canvas.height*0.5)+'px'},duration*0.75,function(){callback(obj);});}\nreturn this;};RG.Effects.Common.reveal=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var callback=arguments[1]||function(){};var xy=RG.getCanvasXY(obj.canvas);var divs=[['rgraph_reveal_left_'+obj.id,xy[0],xy[1],obj.canvas.width/2,obj.canvas.height],['rgraph_reveal_right_'+obj.id,(xy[0]+(obj.canvas.width/2)),xy[1],(obj.canvas.width/2),obj.canvas.height],['rgraph_reveal_top_'+obj.id,xy[0],xy[1],obj.canvas.width,(obj.canvas.height/2)],['rgraph_reveal_bottom_'+obj.id,xy[0],(xy[1]+(obj.canvas.height/2)),obj.canvas.width,(obj.canvas.height/2)]];for(var i=0,len=divs.length;i<len;++i){var div=document.createElement('DIV');div.id=divs[i][0];div.style.width=divs[i][3]+'px';div.style.height=divs[i][4]+'px';div.style.left=divs[i][1]+'px';div.style.top=divs[i][2]+'px';div.style.position='absolute';div.style.backgroundColor=opt&&typeof opt.color==='string'?opt.color:'white';document.body.appendChild(div);}\nRG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);jQuery('#rgraph_reveal_left_'+obj.id).animate({width:0},duration);jQuery('#rgraph_reveal_right_'+obj.id).animate({left:'+='+(obj.canvas.width/2),width:0},duration);jQuery('#rgraph_reveal_top_'+obj.id).animate({height:0},duration);jQuery('#rgraph_reveal_bottom_'+obj.id).animate({top:'+='+(obj.canvas.height/2),height:0},duration);setTimeout(function()\n{doc.body.removeChild(doc.getElementById(\"rgraph_reveal_top_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_reveal_bottom_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_reveal_left_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_reveal_right_\"+obj.id));callback(obj);},duration);return this;};RG.Effects.Common.revealCircular=RG.Effects.Common.revealcircular=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var callback=arguments[1]||function(){};var currentRadius=0\nvar centerx=obj.canvas.width/2;var centery=obj.canvas.height/2;var targetRadius=ma.max(obj.canvas.height,obj.canvas.width);var step=targetRadius/frames;var color=opt.background||opt.color||opt.backgroundColor||'transparent';function iterator()\n{RG.clear(obj.canvas,color);obj.context.save();obj.context.beginPath();obj.context.arc(centerx,centery,currentRadius,0,RG.TWOPI,false);obj.context.clip();if(opt.background){RG.clear(obj.canvas,opt.background);}\nobj.draw();obj.context.restore();if(currentRadius<targetRadius){currentRadius+=step;RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.Effects.Common.conceal=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var xy=RG.getCanvasXY(obj.canvas);var color=opt.background||opt.color||opt.backgroundColor||'white';var divs=[['rgraph_conceal_left_'+obj.id,xy[0],xy[1],0,obj.canvas.height],['rgraph_conceal_right_'+obj.id,(xy[0]+obj.canvas.width),xy[1],0,obj.canvas.height],['rgraph_conceal_top_'+obj.id,xy[0],xy[1],obj.canvas.width,0],['rgraph_conceal_bottom_'+obj.id,xy[0],(xy[1]+obj.canvas.height),obj.canvas.width,0]];for(var i=0,len=divs.length;i<len;++i){var div=doc.createElement('DIV');div.id=divs[i][0];div.style.width=divs[i][3]+'px';div.style.height=divs[i][4]+'px';div.style.left=divs[i][1]+'px';div.style.top=divs[i][2]+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);}\njQuery('#rgraph_conceal_left_'+obj.id).animate({width:'+='+(obj.canvas.width/2)},duration);jQuery('#rgraph_conceal_right_'+obj.id).animate({left:'-='+(obj.canvas.width/2),width:(obj.canvas.width/2)},duration);jQuery('#rgraph_conceal_top_'+obj.id).animate({height:'+='+(obj.canvas.height/2)},duration);jQuery('#rgraph_conceal_bottom_'+obj.id).animate({top:'-='+(obj.canvas.height/2),height:(obj.canvas.height/2)},duration);setTimeout(function()\n{doc.body.removeChild(doc.getElementById(\"rgraph_conceal_top_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_conceal_bottom_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_conceal_left_\"+obj.id));doc.body.removeChild(doc.getElementById(\"rgraph_conceal_right_\"+obj.id));RG.clear(obj.canvas);callback(obj);},duration);return this;};RG.Effects.Common.hBlindsOpen=RG.Effects.Common.hblindsOpen=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var height=this.canvas.height/5;RG.clear(this.canvas);RG.redrawCanvas(this.canvas);for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hblinds_'+i+'_'+obj.id;div.style.width=this.canvas.width+'px';div.style.height=height+'px';div.style.left=xy[0]+'px';div.style.top=(xy[1]+(this.canvas.height*(i/5)))+'px';div.style.position='absolute';div.style.backgroundColor=color;document.body.appendChild(div);jQuery('#rgraph_hblinds_'+i+'_'+obj.id).animate({height:0},duration);}\nsetTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_0_'+obj.id));},duration);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_1_'+obj.id));},duration);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_2_'+obj.id));},duration);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_3_'+obj.id));},duration);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_4_'+obj.id));},duration);setTimeout(function(){callback(obj);},duration);return this;};RG.Effects.Common.hBlindsClose=RG.Effects.Common.hblindsclose=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var height=this.canvas.height/5;for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hblinds_'+i+'_'+obj.id;div.style.width=this.canvas.width+'px';div.style.height=0;div.style.left=xy[0]+'px';div.style.top=(xy[1]+(this.canvas.height*(i/5)))+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);jQuery('#rgraph_hblinds_'+i+'_'+obj.id).animate({height:height+'px'},duration);}\nsetTimeout(function(){RG.clear(obj.canvas);},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_0_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_1_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_2_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_3_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_hblinds_4_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);};RG.Effects.Common.vBlindsOpen=RG.Effects.Common.vblindsopen=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;RG.redrawCanvas(obj.canvas);for(var i=0;i<10;++i){var div=doc.createElement('DIV');div.id='rgraph_vblinds_'+i+'_'+obj.id;div.style.width=width+'px';div.style.height=this.canvas.height+'px';div.style.left=(xy[0]+(this.canvas.width*(i/10)))+'px';div.style.top=(xy[1])+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);jQuery('#rgraph_vblinds_'+i+'_'+obj.id).animate({width:0},duration);}\nsetTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_0_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_1_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_2_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_3_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_4_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_5_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_6_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_7_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_8_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_9_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);return this;};RG.Effects.Common.vblindsclose=RG.Effects.Common.vBlindsClose=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;for(var i=0;i<10;++i){var div=doc.createElement('DIV');div.id='rgraph_vblinds_'+i+'_'+obj.id;div.style.width=0;div.style.height=this.canvas.height+'px';div.style.left=(xy[0]+(this.canvas.width*(i/10)))+'px';div.style.top=(xy[1])+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);jQuery('#rgraph_vblinds_'+i+'_'+obj.id).animate({width:width},duration);}\nsetTimeout(function(){RG.clear(obj.canvas);},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_0_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_1_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_2_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_3_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_4_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_5_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_6_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_7_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_8_'+obj.id));},duration+100);setTimeout(function(){doc.body.removeChild(doc.getElementById('rgraph_vblinds_9_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);return this;};RG.Effects.Common.slideIn=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;var div=RG.Effects.wrap(obj.canvas);var from=opt.from||'left';div.style.overflow='hidden';RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);canvas.style.position='relative';if(from=='left'){obj.canvas.style.left=(0-div.offsetWidth)+'px';obj.canvas.style.top=0;}else if(from=='top'){obj.canvas.style.left=0;obj.canvas.style.top=(0-div.offsetHeight)+'px';}else if(from=='bottom'){obj.canvas.style.left=0;obj.canvas.style.top=div.offsetHeight+'px';}else{obj.canvas.style.left=div.offsetWidth+'px';obj.canvas.style.top=0;}\njQuery('#'+obj.id).animate({left:0,top:0},duration,function()\n{callback(obj);});return this;};RG.Effects.Common.slideOut=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;var div=RG.Effects.wrap(obj.canvas);var to=opt.to||'left';div.style.overflow='hidden';obj.canvas.style.position='relative';obj.canvas.style.left=0;obj.canvas.style.top=0;if(to=='left'){jQuery('#'+obj.id).animate({left:(0-obj.canvas.width)+'px'},duration,function(){callback(obj);});}else if(to=='top'){jQuery('#'+obj.id).animate({left:0,top:(0-div.offsetHeight)+'px'},duration,function(){callback(obj);});}else if(to=='bottom'){jQuery('#'+obj.id).animate({top:(0+div.offsetHeight)+'px'},duration,function(){callback(obj);});}else{jQuery('#'+obj.id).animate({left:(0+obj.canvas.width)+'px'},duration,function(){callback(obj);});}\nreturn this;};RG.Effects.Common.hscissorsopen=RG.Effects.Common.hScissorsOpen=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;var to=opt.to||'left';var height=obj.canvas.height/5;RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);for(var i=0;i<5;++i){var div=doc.getElementById(\"rgraph_hscissors_\"+i+'_'+obj.id)\nif(!div){var div=doc.createElement('DIV');div.id='rgraph_hscissors_'+i+'_'+obj.id;div.style.width=obj.canvas.width+'px';div.style.height=height+'px';div.style.left=xy[0]+'px';div.style.top=(xy[1]+(obj.canvas.height*(i/5)))+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_hscissors_'+i+'_'+obj.id).animate({left:xy[0]+obj.canvas.width+'px',width:0},duration);}else{jQuery('#'+'rgraph_hscissors_'+i+'_'+obj.id).animate({width:0},duration);}}\nsetTimeout(function()\n{doc.body.removeChild(doc.getElementById('rgraph_hscissors_0_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_hscissors_1_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_hscissors_2_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_hscissors_3_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_hscissors_4_'+obj.id));callback(obj);},duration);return this;};RG.Effects.Common.hScissorsClose=RG.Effects.Common.hscissorsclose=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var height=obj.canvas.height/5;RG.redrawCanvas(obj.canvas);for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hscissors_'+i+'_'+obj.id;div.style.width=0;div.style.height=height+'px';div.style.left=(i%2==0?xy[0]+obj.canvas.width:xy[0])+'px';div.style.top=(xy[1]+(obj.canvas.height*(i/5)))+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);if(i%2==0){jQuery('#'+'rgraph_hscissors_'+i+'_'+obj.id).animate({left:xy[0]+'px',width:obj.canvas.width+'px'},duration);}else{jQuery('#'+'rgraph_hscissors_'+i+'_'+obj.id).animate({width:obj.canvas.width+'px'},duration);}}\nsetTimeout(function()\n{RGraph.clear(obj.canvas);jQuery('#'+'rgraph_hscissors_'+0+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+1+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+2+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+3+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+4+'_'+obj.id).remove();callback(obj);},duration);return this;};RG.Effects.Common.vScissorsOpen=RG.Effects.Common.vscissorsopen=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var xy=RG.getCanvasXY(obj.canvas);var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;RG.redrawCanvas(obj.canvas);for(var i=0;i<10;++i){var div=doc.getElementById(\"rgraph_vscissors_\"+i+'_'+obj.id);if(!div){var div=doc.createElement('DIV');div.id='rgraph_vscissors_'+i+'_'+obj.id;div.style.width=width+'px';div.style.height=obj.canvas.height+'px';div.style.left=xy[0]+(obj.canvas.width*(i/10))+'px';div.style.top=xy[1]+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_vscissors_'+i+'_'+obj.id).animate({top:xy[1]+obj.canvas.height+'px',height:0},duration);}else{jQuery('#'+'rgraph_vscissors_'+i+'_'+obj.id).animate({height:0},duration);}}\nsetTimeout(function()\n{doc.body.removeChild(doc.getElementById('rgraph_vscissors_0'+'_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_vscissors_1'+'_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_vscissors_2'+'_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_vscissors_3'+'_'+obj.id));doc.body.removeChild(doc.getElementById('rgraph_vscissors_4'+'_'+obj.id));callback(obj);},duration);return this;};RG.Effects.Common.vscissorsclose=RG.Effects.Common.vScissorsClose=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var duration=(frames/60)*1000;var frame=0;var callback=arguments[1]||function(){};var xy=RG.getCanvasXY(obj.canvas);var color=opt.background||opt.color||opt.backgroundColor||'white';var xy=RG.getCanvasXY(this.canvas);var width=this.canvas.width/10;RG.redrawCanvas(obj.canvas);for(var i=0;i<10;++i){var div=doc.getElementById(\"rgraph_vscissors_\"+i+'_'+obj.id)\nif(!div){var div=doc.createElement('DIV');div.id='rgraph_vscissors_'+i+'_'+obj.id;div.style.width=width+'px';div.style.height=0;div.style.left=xy[0]+(width*i)+'px';div.style.top=(i%2==0?xy[1]+obj.canvas.height:xy[1])+'px';div.style.position='absolute';div.style.backgroundColor=color;doc.body.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_vscissors_'+i+'_'+obj.id).animate({top:xy[1]+'px',height:obj.canvas.height+'px'},duration);}else{jQuery('#'+'rgraph_vscissors_'+i+'_'+obj.id).animate({height:obj.canvas.height+'px'},duration);}}\nsetTimeout(function()\n{RG.clear(obj.canvas);for(var i=0;i<10;i++){jQuery('#rgraph_vscissors_'+i+'_'+obj.id).remove();}\ncallback(obj);},duration);return this;};RG.Effects.Common.animate=function(map)\n{var obj=this;obj.draw();var totalFrames=(map&&map['frames'])?map['frames']:30;var currentFrame=new Array();var originalValues=new Array();var diffs=new Array();var steps=new Array();var callback=arguments[1]\nfunction iterator()\n{var id=[obj.id+'_'+obj.type];if(!currentFrame[id]){currentFrame[id]=totalFrames;originalValues[id]={};diffs[id]={};steps[id]={};}\nfor(var i in map){if(typeof map[i]==='string'||typeof map[i]==='number'){if(currentFrame[id]==totalFrames){originalValues[id][i]=obj.get(i);diffs[id][i]=map[i]-originalValues[id][i];steps[id][i]=diffs[id][i]/totalFrames;}\nobj.set(i,obj.get(i)+steps[id][i]);RG.clear(obj.canvas);obj.draw();}}\nif(--currentFrame[id]>0){RG.Effects.updateCanvas(iterator);}else{if(typeof callback==='function'){callback(obj);}}}\niterator();}})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.key.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.HTML=RGraph.HTML||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.drawKey=RG.DrawKey=function(obj,key,colors)\n{if(!key){return;}\nvar ca=obj.canvas,co=obj.context,prop=obj.properties,keypos=prop['chart.key.position'],textsize=prop['chart.text.size'],key_non_null=[],colors_non_null=[];co.lineWidth=1;co.beginPath();if(typeof(prop['chart.key.vpos'])=='number'){obj.Set('chart.key.position.y',prop['chart.key.vpos']*prop['chart.gutter.top']);}\nfor(var i=0;i<key.length;++i){if(key[i]!=null){colors_non_null.push(colors[i]);key_non_null.push(key[i]);}}\nkey=key_non_null;colors=colors_non_null;var textAccessible=false;function DrawKey_graph(obj,key,colors)\n{var text_size=typeof(prop['chart.key.text.size'])=='number'?prop['chart.key.text.size']:prop['chart.text.size'],text_italic=prop['chart.key.text.italic']?true:false,text_bold=prop['chart.key.text.bold']?true:false,text_font=prop['chart.key.text.font']||prop['chart.key.font']||prop['chart.text.font'],gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,hpos=prop['chart.yaxispos']=='right'?gutterLeft+10:ca.width-gutterRight-10,vpos=gutterTop+10,title=prop['chart.title'],blob_size=text_size,hmargin=8,vmargin=4,fillstyle=prop['chart.key.background'],text_color=prop['chart.key.text.color'],strokestyle='#333',height=0,width=0;if(!obj.coords)obj.coords={};obj.coords.key=[];co.font=text_size+'pt '+prop['chart.text.font'];for(i=0;i<key.length;++i){width=Math.max(width,co.measureText(key[i]).width);}\nwidth+=5;width+=blob_size;width+=5;width+=5;width+=5;if(prop['chart.yaxispos']=='left'||(obj.type==='pie'&&!prop['chart.yaxispos'])||(obj.type==='hbar'&&!prop['chart.yaxispos'])||(obj.type==='hbar'&&prop['chart.yaxispos']==='center')||(obj.type==='hbar'&&prop['chart.yaxispos']==='right')||(obj.type==='rscatter'&&!prop['chart.yaxispos'])||(obj.type==='radar'&&!prop['chart.yaxispos'])||(obj.type==='rose'&&!prop['chart.yaxispos'])||(obj.type==='funnel'&&!prop['chart.yaxispos'])||(obj.type==='vprogress'&&!prop['chart.yaxispos'])||(obj.type==='hprogress'&&!prop['chart.yaxispos'])){hpos-=width;}\nif(typeof(prop['chart.key.halign'])=='string'){if(prop['chart.key.halign']=='left'){hpos=gutterLeft+10;}else if(prop['chart.key.halign']=='right'){hpos=ca.width-gutterRight-width;}}\nif(typeof(prop['chart.key.position.x'])=='number'){hpos=prop['chart.key.position.x'];}\nif(typeof(prop['chart.key.position.y'])=='number'){vpos=prop['chart.key.position.y'];}\nif(prop['chart.key.shadow']){co.shadowColor=prop['chart.key.shadow.color'];co.shadowBlur=prop['chart.key.shadow.blur'];co.shadowOffsetX=prop['chart.key.shadow.offsetx'];co.shadowOffsetY=prop['chart.key.shadow.offsety'];}\nco.beginPath();co.fillStyle=prop['chart.key.background'];co.strokeStyle='black';if(typeof(prop['chart.key.position.graph.boxed'])=='undefined'||(typeof(prop['chart.key.position.graph.boxed'])=='boolean'&&prop['chart.key.position.graph.boxed'])){if(arguments[3]!=false){co.lineWidth=typeof(prop['chart.key.linewidth'])=='number'?prop['chart.key.linewidth']:1;if(prop['chart.key.rounded']==true){co.beginPath();co.strokeStyle=strokestyle;RG.strokedCurvyRect(co,Math.round(hpos),Math.round(vpos),width-5,5+((text_size+5)*RG.getKeyLength(key)),4);co.stroke();co.fill();RG.NoShadow(obj);}else{co.strokeRect(Math.round(hpos),Math.round(vpos),width-5,5+((text_size+5)*RG.getKeyLength(key)));co.fillRect(Math.round(hpos),Math.round(vpos),width-5,5+((text_size+5)*RG.getKeyLength(key)));}}}\nRG.NoShadow(obj);co.beginPath();if(prop['chart.key.colors']){colors=prop['chart.key.colors'];}\nfor(var i=key.length-1;i>=0;i--){var j=Number(i)+1;if(typeof prop['chart.key.color.shape']==='object'&&typeof prop['chart.key.color.shape'][i]==='string'){var blob_shape=prop['chart.key.color.shape'][i];}else if(typeof prop['chart.key.color.shape']==='object'&&typeof prop['chart.key.color.shape'][i]==='function'){var blob_shape=prop['chart.key.color.shape'][i];}else if(typeof prop['chart.key.color.shape']==='string'){var blob_shape=prop['chart.key.color.shape'];}else if(typeof prop['chart.key.color.shape']==='function'){var blob_shape=prop['chart.key.color.shape'];}else{var blob_shape='rect';}\nif(blob_shape=='circle'){co.beginPath();co.fillStyle=colors[i];co.arc(hpos+5+(blob_size/2),vpos+(5*j)+(text_size*j)-text_size+(blob_size/2),blob_size/2,0,6.26,0);co.fill();}else if(blob_shape=='line'){co.beginPath();co.strokeStyle=colors[i];co.moveTo(hpos+5,vpos+(5*j)+(text_size*j)-text_size+(blob_size/2));co.lineTo(hpos+blob_size+5,vpos+(5*j)+(text_size*j)-text_size+(blob_size/2));co.stroke();}else if(blob_shape=='triangle'){co.beginPath();co.strokeStyle=colors[i];co.moveTo(hpos+5,vpos+(5*j)+(text_size*j)-text_size+blob_size);co.lineTo(hpos+(blob_size/2)+5,vpos+(5*j)+(text_size*j)-text_size);co.lineTo(hpos+blob_size+5,vpos+(5*j)+(text_size*j)-text_size+blob_size);co.closePath();co.fillStyle=colors[i];co.fill();}else if(typeof blob_shape==='function'){blob_shape({object:obj,color:colors[i],x:hpos+5,y:vpos+(5*j)+(text_size*j)-text_size,width:text_size,height:text_size+1});}else{co.fillStyle=colors[i];co.fillRect(hpos+5,vpos+(5*j)+(text_size*j)-text_size,text_size,text_size+1);}\nco.beginPath();co.fillStyle=typeof text_color=='object'?text_color[i]:text_color;ret=RG.text2(obj,{font:text_font,size:text_size,bold:text_bold,italic:text_italic,x:hpos+blob_size+5+5,y:vpos+(5*j)+(text_size*j)+3,text:key[i],accessible:textAccessible});obj.coords.key[i]=[ret.x,ret.y,ret.width,ret.height,key[i],colors[i],obj];}\nco.fill();}\nfunction DrawKey_gutter(obj,key,colors)\n{var text_size=typeof(prop['chart.key.text.size'])=='number'?prop['chart.key.text.size']:prop['chart.text.size'],text_bold=prop['chart.key.text.bold'],text_italic=prop['chart.key.text.italic'],text_font=prop['chart.key.text.font']||prop['chart.key.font']||prop['chart.text.font'],text_color=prop['chart.key.text.color'],gutterLeft=obj.gutterLeft,gutterRight=obj.gutterRight,gutterTop=obj.gutterTop,gutterBottom=obj.gutterBottom,hpos=((ca.width-gutterLeft-gutterRight)/2)+obj.gutterLeft,vpos=gutterTop-text_size-5,title=prop['chart.title'],blob_size=text_size,hmargin=8,vmargin=4,fillstyle=prop['chart.key.background'],strokestyle='#999',length=0;if(!obj.coords)obj.coords={};obj.coords.key=[];co.font=(obj.properties['chart.key.text.italic']?'italic ':'')+(obj.properties['chart.key.text.bold']?'bold ':'')+text_size+'pt '+text_font;for(i=0;i<key.length;++i){length+=hmargin;length+=blob_size;length+=hmargin;length+=co.measureText(key[i]).width;}\nlength+=hmargin;if(obj.type=='pie'){if(prop['chart.align']=='left'){var hpos=obj.radius+gutterLeft;}else if(prop['chart.align']=='right'){var hpos=ca.width-obj.radius-gutterRight;}else{hpos=ca.width/2;}}\nhpos-=(length/2);if(typeof(prop['chart.key.position.x'])=='number'){hpos=prop['chart.key.position.x'];}\nif(typeof(prop['chart.key.position.y'])=='number'){vpos=prop['chart.key.position.y'];}\nif(obj.Get('chart.key.position.gutter.boxed')){if(prop['chart.key.shadow']){co.shadowColor=prop['chart.key.shadow.color'];co.shadowBlur=prop['chart.key.shadow.blur'];co.shadowOffsetX=prop['chart.key.shadow.offsetx'];co.shadowOffsetY=prop['chart.key.shadow.offsety'];}\nco.beginPath();co.fillStyle=fillstyle;co.strokeStyle=strokestyle;if(prop['chart.key.rounded']){RG.strokedCurvyRect(co,hpos,vpos-vmargin,length,text_size+vmargin+vmargin)}else{co.rect(hpos,vpos-vmargin,length,text_size+vmargin+vmargin);}\nco.stroke();co.fill();RG.NoShadow(obj);}\nif(prop['chart.key.colors']){colors=prop['chart.key.colors'];}\nfor(var i=0,pos=hpos;i<key.length;++i){pos+=hmargin;if(typeof prop['chart.key.color.shape']==='object'&&typeof prop['chart.key.color.shape'][i]==='string'){var blob_shape=prop['chart.key.color.shape'][i];}else if(typeof prop['chart.key.color.shape']==='object'&&typeof prop['chart.key.color.shape'][i]==='function'){var blob_shape=prop['chart.key.color.shape'][i];}else if(typeof prop['chart.key.color.shape']==='function'){var blob_shape=prop['chart.key.color.shape'];}else if(typeof(prop['chart.key.color.shape'])=='string'){var blob_shape=prop['chart.key.color.shape'];}else{var blob_shape='square';}\nif(blob_shape=='line'){co.beginPath();co.strokeStyle=colors[i];co.moveTo(pos,vpos+(blob_size/2));co.lineTo(pos+blob_size,vpos+(blob_size/2));co.stroke();}else if(blob_shape=='circle'){co.beginPath();co.fillStyle=colors[i];co.moveTo(pos,vpos+(blob_size/2));co.arc(pos+(blob_size/2),vpos+(blob_size/2),(blob_size/2),0,6.28,0);co.fill();}else if(blob_shape=='triangle'){co.fillStyle=colors[i];co.beginPath();co.strokeStyle=colors[i];co.moveTo(pos,vpos+blob_size);co.lineTo(pos+(blob_size/2),vpos);co.lineTo(pos+blob_size,vpos+blob_size);co.closePath();co.fill();}else if(typeof blob_shape==='function'){blob_shape({object:obj,color:colors[i],x:pos,y:vpos,width:blob_size,height:blob_size});}else{co.beginPath();co.fillStyle=colors[i];co.rect(pos,vpos,blob_size,blob_size);co.fill();}\npos+=blob_size;pos+=hmargin;co.beginPath();co.fillStyle=(typeof text_color==='object')?text_color[i]:text_color;var ret=RG.Text2(obj,{font:text_font,bold:text_bold,size:text_size,italic:text_italic,x:pos,y:vpos+text_size+1,text:key[i],accessible:textAccessible});co.fill();pos+=co.measureText(key[i]).width;obj.coords.key[i]=[ret.x,ret.y,ret.width,ret.height,key[i],colors[i],obj];}}\nif(keypos&&keypos=='gutter'){DrawKey_gutter(obj,key,colors);}else if(keypos&&keypos=='graph'){DrawKey_graph(obj,key,colors);}else{alert('[COMMON] ('+obj.id+') Unknown key position: '+keypos);}\nif(prop['chart.key.interactive']){if(!RGraph.Drawing||!RGraph.Drawing.Rect){alert('[INTERACTIVE KEY] The drawing API Rect library does not appear to have been included (which the interactive key uses)');}\nif(!RGraph.InstallWindowMousedownListener){alert('[INTERACTIVE KEY] The dynamic library does not appear to have been included');}\nfor(var i=0,len=obj.coords.key.length,maxlen=0;i<len;i+=1){maxlen=Math.max(maxlen,obj.coords.key[i][2]);}\nfor(var i=0,len=obj.coords.key.length;i<len;i+=1){(function(idx)\n{var arr=obj.coords.key;var value=obj.coords.key[idx];var index=idx;var rect=new RGraph.Drawing.Rect(obj.id,value[0],value[1],prop['chart.key.position']=='gutter'?value[2]:maxlen,value[3]).Set('fillstyle','rgba(0,0,0,0)').Draw();rect.onclick=function(e,shape)\n{var co=rect.context;co.fillStyle=prop['chart.key.interactive.highlight.label'];co.fillRect(shape.x,shape.y,shape.width,shape.height);if(typeof obj.interactiveKeyHighlight=='function'){obj.Set('chart.key.interactive.index',idx);RG.FireCustomEvent(obj,'onbeforeinteractivekey');obj.interactiveKeyHighlight(index);RG.FireCustomEvent(obj,'onafterinteractivekey');}}\nrect.onmousemove=function(e,shape)\n{return true;}})(i);}}};RG.getKeyLength=function(key)\n{var length=0;for(var i=0,len=key.length;i<len;i+=1){if(key[i]!=null){++length;}}\nreturn length;};RGraph.HTML.key=RGraph.HTML.Key=function(id,prop)\n{var div=doc.getElementById(id);var uid=RG.createUID();var str='<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" id=\"rgraph_key_'+uid+'\" style=\"display: inline;'+(function()\n{var style=''\nfor(i in prop.tableCss){if(typeof i==='string'){style=style+i+': '+prop.tableCss[i]+';';}}\nreturn style;})()+'\" '+(prop.tableClass?'class=\"'+prop.tableClass+'\"':'')+'>';for(var i=0;i<prop.labels.length;i+=1){str+='<tr><td><div style=\"'+(function()\n{var style='';for(var j in prop.blobCss){if(typeof j==='string'){style=style+j+': '+prop.blobCss[j]+';';}}\nreturn style;})()+'display: inline-block; margin-right: 5px; margin-top: 4px; width: 15px; height: 15px; background-color: '+prop.colors[i]+'\"'+(prop.blobClass?'class=\"'+prop.blobClass+'\"':'')+'>&nbsp;</div><td>'+(prop.links&&prop.links[i]?'<a href=\"'+prop.links[i]+'\">':'')+'<span '+(prop.labelClass?'class=\"'+prop.labelClass+'\"':'')+'\" style=\"'+(function()\n{var style='';for(var j in prop.labelCss){if(typeof j==='string'){style=style+j+': '+prop.labelCss[j]+';';}}\nreturn style;})()+' '+(function()\n{var style='';if(prop['labelCss_'+i]){for(var j in prop['labelCss_'+i]){style=style+j+': '+prop['labelCss_'+i][j]+';';}}\nreturn style?style+'\"':'\"';})()+'>'+prop.labels[i]+'</span>'+(prop.links&&prop.links[i]?'</a>':'')+'</td></tr>';}\ndiv.innerHTML+=(str+'</table>');return doc.getElementById('rgraph_key_'+uid);};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.resizing.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,active=null;RGraph.allowResizing=RGraph.AllowResizing=function(obj)\n{var ca=obj.canvas,co=obj.context,pa2=RG.path2;ca.resizing=ca.resizing||{};ca.resizing.placeHolders=ca.resizing.placeHolders||[];if(!ca.resizing.originalw){ca.resizing.originalw=ca.width;}\nif(!ca.resizing.originalh){ca.resizing.originalh=ca.height;}\nvar resizeHandleSize=15;if(!ca.resizing.__rgraph_original_width__||!ca.resizing.__rgraph_original_height__||!ca.resizing.__adjustX||!ca.resizing.__adjustY){ca.resizing.__rgraph_original_width__=ca.width;ca.resizing.__rgraph_original_height__=ca.height;ca.resizing.adjustX=(typeof obj.get('chart.resize.handle.adjust')=='object'&&typeof obj.get('chart.resize.handle.adjust')[0]=='number'?obj.Get('chart.resize.handle.adjust')[0]:0);ca.resizing.adjustY=(typeof obj.get('chart.resize.handle.adjust')=='object'&&typeof obj.get('chart.resize.handle.adjust')[1]=='number'?obj.Get('chart.resize.handle.adjust')[1]:0);ca.resizing.bgcolor=obj.get('chart.resize.handle.background')||'rgba(0,0,0,0)';}\npa2(co,'b m % % r % % % % f %',ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-resizeHandleSize,ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-resizeHandleSize+ca.resizing.adjustY,2*resizeHandleSize,resizeHandleSize,ca.resizing.bgcolor);pa2(co,'b lw 1 m % % l % % m % % l % % s gray f transparent',ma.round(ca.width-(resizeHandleSize/2)+ca.resizing.adjustX),ca.height-resizeHandleSize+ca.resizing.adjustY,ma.round(ca.width-(resizeHandleSize/2)+ca.resizing.adjustX),ca.height+ca.resizing.adjustY,ca.width+ca.resizing.adjustX,ma.round(ca.height-(resizeHandleSize/2)+ca.resizing.adjustY),ca.width-resizeHandleSize+ca.resizing.adjustX,ma.round(ca.height-(resizeHandleSize/2)+ca.resizing.adjustY));pa2(co,['b','m',ca.width-(resizeHandleSize/2)+ca.resizing.adjustX,ca.height-resizeHandleSize+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)+3+ca.resizing.adjustX,ca.height-resizeHandleSize+3+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)-3+ca.resizing.adjustX,ca.height-resizeHandleSize+3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width-(resizeHandleSize/2)+ca.resizing.adjustX,ca.height+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)+3+ca.resizing.adjustX,ca.height-3+ca.resizing.adjustY,'l',ca.width-(resizeHandleSize/2)-3+ca.resizing.adjustX,ca.height-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width-resizeHandleSize+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-resizeHandleSize+3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'l',ca.width-resizeHandleSize+3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'l',ca.width-3+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'c','f','gray']);pa2(co,['b','m',ca.width+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'r',ca.width-(resizeHandleSize/2)-2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,4,4,'r',ca.width-(resizeHandleSize/2)-2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,4,4,'s','gray','f','white']);pa2(co,['b','m',ma.round(ca.width-resizeHandleSize-3+ca.resizing.adjustX),ca.height-resizeHandleSize/2+ca.resizing.adjustY,'l',ma.round(ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)-2+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+2+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+2+ca.resizing.adjustY,'l',ca.width-resizeHandleSize-resizeHandleSize+ca.resizing.adjustX,ca.height-(resizeHandleSize/2)+ca.resizing.adjustY,'s','gray','f','gray']);pa2(co,['b','m',ma.round(ca.width-resizeHandleSize-resizeHandleSize-1+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)-3+ca.resizing.adjustY,'l',ma.round(ca.width-resizeHandleSize-resizeHandleSize-1+ca.resizing.adjustX),ca.height-(resizeHandleSize/2)+3+ca.resizing.adjustY,'s','f']);if(obj.get('chart.resizable')&&!ca.rgraphResizewrapper){ca.rgraphResizewrapper=$('<div id=\"rgraph_resize_container_'+ca.id+'\"></div>').css({'float':ca.style.cssFloat,position:'relative'}).get(0);$(ca).wrap(ca.rgraphResizewrapper);ca.style.cssFloat='none';ca.style.top=0;ca.style.left=0;var window_onmousemove=function(e)\n{var ca=active,obj=ca?ca.__object__:null;if(ca){e=RG.fixEventObject(e);if(ca.resizing.mousedown){var newWidth=ca.width+(e.pageX-ca.resizing.originalx),newHeight=ca.height+(e.pageY-ca.resizing.originaly),minWidth=obj.get('resizableMinwidth'),minHeight=obj.get('resizableMinheight');if(newWidth>(ca.resizing.originalw/2)&&(typeof obj.get('resizableMaxwidth')==='number'?newWidth<obj.get('resizableMaxwidth'):true)&&(typeof minWidth==='number'?newWidth>minWidth:true)){ca.resizing.div.style.width=newWidth+'px';}\nif(newHeight>(ca.resizing.originalh/2)&&(typeof obj.get('resizableMaxheight')==='number'?newHeight<obj.get('resizableMaxheight'):true)&&(typeof minHeight==='number'?newHeight>minHeight:true)){ca.resizing.div.style.height=newHeight+'px';}\nRG.fireCustomEvent(ca.__object__,'onresize');}}}\nif(typeof ca.rgraph_resize_window_mousemove_listener_installed!='boolean'){window.addEventListener('mousemove',window_onmousemove,false);ca.rgraph_resize_window_mousemove_listener_installed=true;}\nvar MouseupFunc=function(e)\n{if(!ca.resizing||!ca.resizing.div||!ca.resizing.mousedown){return;}\nif(ca.resizing.div){var div=ca.resizing.div;var coords=RG.getCanvasXY(ca);var parentNode=ca.parentNode;if(ca.style.position!='absolute'){var placeHolderDIV=document.createElement('DIV');placeHolderDIV.style.width=ca.resizing.originalw+'px';placeHolderDIV.style.height=ca.resizing.originalh+'px';placeHolderDIV.style.display='inline-block';placeHolderDIV.style.position=ca.style.position;placeHolderDIV.style.left=ca.style.left;placeHolderDIV.style.top=ca.style.top;placeHolderDIV.style.cssFloat=ca.style.cssFloat;parentNode.insertBefore(placeHolderDIV,ca);}\nca.style.backgroundColor='white';ca.style.position='absolute';ca.style.border='1px dashed gray';ca.style.boxShadow='2px 2px 5px #ddd';ca.style.left=0;ca.style.top=0;ca.width=parseInt(div.style.width);ca.height=parseInt(div.style.height);ca.getContext('2d').translate(0.5,0.5);var objects=RG.ObjectRegistry.getObjectsByCanvasID(ca.id);for(var i=0,len=objects.length;i<len;i+=1){RG.resetColorsToOriginalValues(objects[i]);if(typeof objects[i].reset==='function'){objects[i].reset();}}\nRG.cache=[];RG.fireCustomEvent(ca.__object__,'onresizebeforedraw');RG.redrawCanvas(ca);ca.resizing.mousedown=false;div.style.display='none';document.body.removeChild(div);}\nif(RG.Registry.Get('chart.zoomed.div')||RGraph.Registry.Get('chart.zoomed.img')){RG.Registry.Set('chart.zoomed.div',null);RG.Registry.Set('chart.zoomed.img',null);}\nRG.FireCustomEvent(ca.__object__,'onresizeend');};var window_onmouseup=MouseupFunc;if(typeof ca.rgraph_resize_window_mouseup_listener_installed!='boolean'){window.addEventListener('mouseup',window_onmouseup,false);ca.rgraph_resize_window_mouseup_listener_installed=true;}\nvar canvas_onmousemove=function(e)\n{e=RG.fixEventObject(e);var coords=RG.getMouseXY(e);var obj=e.target.__object__;var ca=e.target;var co=ca.getContext('2d');var cursor=ca.style.cursor;if(!ca.resizing.original_cursor){ca.resizing.original_cursor=cursor;}\nif((coords[0]>(ca.width-resizeHandleSize)&&coords[0]<ca.width&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height)){ca.style.cursor='move';}else if(coords[0]>(ca.width-resizeHandleSize-resizeHandleSize)&&coords[0]<ca.width-resizeHandleSize&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height){ca.style.cursor='pointer';}else{if(ca.resizing.original_cursor){ca.style.cursor=ca.resizing.original_cursor;ca.resizing.original_cursor=null;}else{ca.style.cursor='default';}}};if(typeof ca.rgraph_resize_mousemove_listener_installed!='boolean'){ca.addEventListener('mousemove',canvas_onmousemove,false);ca.rgraph_resize_mousemove_listener_installed=true;}\nvar canvas_onmouseout=function(e)\n{e.target.style.cursor='default';e.target.title='';};if(typeof ca.rgraph_resize_mouseout_listener_installed!='boolean'){ca.addEventListener('mouseout',canvas_onmouseout,false);ca.rgraph_resize_mouseout_listener_installed=true;}\nvar canvas_onmousedown=function(e)\n{e=RG.fixEventObject(e);var coords=RG.getMouseXY(e);var canvasXY=RG.getCanvasXY(e.target);var ca=e.target;active=ca;if(coords[0]>(ca.width-resizeHandleSize)&&coords[0]<ca.width&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height){RG.fireCustomEvent(obj,'onresizebegin');if(ca.resizing.original_css_border==null){ca.resizing.original_css_border=ca.style.border;}\nif(ca.resizing.original_css_shadow==null){ca.resizing.original_css_shadow=ca.style.boxShadow;}\nca.resizing.mousedown=true;var div=document.createElement('DIV');div.style.position='absolute';div.style.left=canvasXY[0]+'px';div.style.top=canvasXY[1]+'px';div.style.width=ca.width+'px';div.style.height=ca.height+'px';div.style.border='1px dotted black';div.style.backgroundColor='gray';div.style.opacity=0.5;div.__canvas__=e.target;document.body.appendChild(div);ca.resizing.div=div;ca.resizing.placeHolders.push(div);for(var i=0;i<(ca.resizing.placeHolders.length-1);++i){ca.resizing.placeHolders[i].style.display='none';}\ndiv.onmouseup=function(e)\n{MouseupFunc(e);}\nca.resizing.div.onmouseover=function(e)\n{e=RG.fixEventObject(e);e.stopPropagation();}\nca.resizing.originalx=e.pageX;ca.resizing.originaly=e.pageY;ca.resizing.originalCanvasX=RG.getCanvasXY(ca)[0];ca.resizing.originalCanvasY=RG.getCanvasXY(ca)[1];}\nif(coords[0]>(ca.width-resizeHandleSize-resizeHandleSize)&&coords[0]<ca.width-resizeHandleSize&&coords[1]>(ca.height-resizeHandleSize)&&coords[1]<ca.height&&ca.resizing.originalw&&ca.resizing.originaly){RG.fireCustomEvent(ca.__object__,'onresizebegin');ca.width=ca.resizing.originalw;ca.height=ca.resizing.originalh;if(ca.__link__&&ca.__link__.style.display==='none'){ca.__link__.style.display='inline';}\nif(typeof ca.parentNode.id==='string'&&ca.parentNode.id.substring(0,24)==='rgraph_resize_container_'){ca.parentNode.style.width=ca.resizing.originalw+'px';ca.parentNode.style.height=ca.resizing.originalh+'px';}\nca.style.border=ca.resizing.original_css_border;ca.style.boxShadow=ca.resizing.original_css_shadow;ca.style.left=(parseInt(ca.style.left))+'px';ca.style.top=(parseInt(ca.style.top))+'px';ca.getContext('2d').translate(0.5,0.5);RG.fireCustomEvent(ca.__object__,'onresizebeforedraw');var objects=RG.ObjectRegistry.getObjectsByCanvasID(ca.id);for(var i=0;i<objects.length;i+=1){RG.resetColorsToOriginalValues(objects[i]);if(objects[i].reset){objects[i].reset();}\nRG.redrawCanvas(objects[i].canvas);}\nRG.cache=[];if(ca.resizing.div){ca.resizing.div.style.width=ca.__original_width__+'px';ca.resizing.div.style.height=ca.__original_height__+'px';}\nRG.fireCustomEvent(ca.__object__,'onresize');RG.fireCustomEvent(ca.__object__,'onresizeend');}};if(typeof ca.rgraph_resize_mousedown_listener_installed!='boolean'){ca.addEventListener('mousedown',canvas_onmousedown,false);ca.rgraph_resize_mousedown_listener_installed=true;}}};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.sheets.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{RGraph.Sheets=function(key)\n{var worksheet,callback,letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ';if(arguments.length===3){worksheet=Number(arguments[1]);callback=arguments[2];}else{worksheet=1;callback=arguments[1];}\nvar url='https://spreadsheets.google.com/feeds/cells/[KEY]/[WORKSHEET]/public/full?alt=json-in-script&callback=__rgraph_JSONPCallback'.replace(/\\[KEY\\]/,key).replace(/\\[WORKSHEET\\]/,worksheet);this.load=function(url,userCallback)\n{var obj=this;__rgraph_JSONPCallback=function(json)\n{obj.json=json;var grid=[],row=0,col=0;for(var i=0;i<json.feed.entry.length;++i){row=json.feed.entry[i].gs$cell.row-1;col=json.feed.entry[i].gs$cell.col-1;if(!grid[row]){grid[row]=[];}\ngrid[row][col]=json.feed.entry[i].content.$t;}\nvar maxcols=0;for(var i=0;i<grid.length;++i){maxcols=grid[i]?Math.max(maxcols,grid[i].length):maxcols;}\nfor(var i=0;i<grid.length;++i){if(typeof grid[i]==='undefined'){grid[i]=new Array(maxcols);}\nfor(var j=0;j<maxcols;j++){if(typeof grid[i][j]==='undefined'){grid[i][j]='';}\nif(grid[i][j].match(/^[0-9]+$/)){grid[i][j]=parseInt(grid[i][j]);}else if(grid[i][j].match(/^[0-9.]+$/)){grid[i][j]=parseFloat(grid[i][j]);}}}\nobj.data=grid;userCallback(obj);};var scriptNode=document.createElement('script');scriptNode.src=url;document.body.appendChild(scriptNode);};this.row=function(index,start)\n{var opt={},row;start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}\nrow=this.data[index-1].slice(start-1);if(opt.trim){row=RGraph.Sheets.arrayRTrim(row);}\nreturn row;};this.col=function(index,start)\n{var opt={},col=[];start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}\nfor(var i=0;i<this.data.length;++i){col.push(this.data[i][index-1]);}\nif(opt.trim){col=RGraph.Sheets.arrayRTrim(col);}\ncol=col.slice(start-1);return col;};this.getIndexOfLetters=function(l)\n{var parts=l.split('');if(parts.length===1){return letters.indexOf(l)+1;}else if(parts.length===2){var idx=((letters.indexOf(parts[0])+1)*26)+(letters.indexOf(parts[1])+1);return idx;}}\nthis.get=function(str)\n{str=str.toUpperCase();if(str.match(/^[a-z]+$/i)){if(str.length===1){var index=letters.indexOf(str)+1;return this.col(index,1,arguments[1]);}else if(str.length===2){var index=((letters.indexOf(str[0])+1)*26)+letters.indexOf(str[1])+1;return this.col(index,1,arguments[1]);}}\nif(str.match(/^[0-9]+$/i)){return this.row(str,null,arguments[1]);}\nif(str.match(/^([a-z]{1,2})([0-9]+)$/i)){var letter=RegExp.$1,number=RegExp.$2,col=this.get(letter,{trim:false});return col[number-1];}\nif(str.match(/^([a-z]{1,2})([0-9]+):([a-z]{1,2})([0-9]+)$/i)){var letter1=RegExp.$1,number1=RegExp.$2,letter2=RegExp.$3,number2=RegExp.$4\nif(letter1===letter2){var cells=[],index=this.getIndexOfLetters(letter1),col=this.col(index,null,{trim:false});for(var i=(number1-1);i<=(number2-1);++i){cells.push(col[i]);}}else if(number1===number2){var cells=[],row=this.row(number1,null,{trim:false}),index1=this.getIndexOfLetters(letter1),index2=this.getIndexOfLetters(letter2)\nfor(var i=(index1-1);i<=(index2-1);++i){cells.push(row[i]);}}\nif(arguments[1]&&arguments[1].trim===false){}else{cells=RGraph.Sheets.arrayRTrim(cells);}\nreturn cells;}};this.load(url,callback);};RGraph.Sheets.arrayRTrim=function(arr)\n{var out=[],content=false;for(var i=(arr.length-1);i>=0;i--){if(arr[i]||content){out.push(arr[i]);content=true;}}\narr=out.reverse();return out;};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.tooltips.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.tooltips={};RG.tooltips.style={display:'inline-block',position:'absolute',padding:'6px',fontFamily:'Arial',fontSize:'10pt',fontWeight:'normal',textAlign:'center',left:0,top:0,backgroundColor:'rgb(255,255,239)',color:'black',visibility:'visible',zIndex:3,borderRadius:'5px',boxShadow:'rgba(96,96,96,0.5) 0 0 5px',opacity:0,lineHeight:'initial'};RG.tooltip=RG.Tooltip=function(obj,text,x,y,idx,e)\n{if(RG.trim(text).length===0){return;}\nRG.fireCustomEvent(obj,'onbeforetooltip');if(typeof(obj.get('chart.tooltips.override'))=='function'){return obj.get('chart.tooltips.override')(obj,text,x,y,idx);}\nvar originalX=x;var originalY=y;text=RG.getTooltipTextFromDIV(text);var timers=RG.Registry.Get('chart.tooltip.timers');if(timers&&timers.length){for(i=0;i<timers.length;++i){clearTimeout(timers[i]);}}\nRG.Registry.Set('chart.tooltip.timers',[]);if(obj.get('chart.contextmenu')){RG.hideContext();}\nvar tooltipObj=document.createElement('DIV');tooltipObj.className=obj.get('chart.tooltips.css.class');for(var i in RGraph.tooltips.style){if(typeof i==='string'){tooltipObj.style[i]=RGraph.tooltips.style[i];}}\ntooltipObj.innerHTML=text;tooltipObj.__text__=text;tooltipObj.__canvas__=obj.canvas;tooltipObj.id='__rgraph_tooltip_'+obj.canvas.id+'_'+obj.uid+'_'+idx;tooltipObj.__event__=obj.Get('chart.tooltips.event')||'click';tooltipObj.__object__=obj;if(typeof idx==='number'){tooltipObj.__index__=idx;origIdx=idx;}\nif(obj.type==='line'||obj.type==='radar'){for(var ds=0;ds<obj.data.length;++ds){if(idx>=obj.data[ds].length){idx-=obj.data[ds].length;}else{break;}}\ntooltipObj.__dataset__=ds;tooltipObj.__index2__=idx;}\ndocument.body.appendChild(tooltipObj);var width=tooltipObj.offsetWidth;var height=tooltipObj.offsetHeight;tooltipObj.style.width=width+'px';var mouseXY=RG.getMouseXY(e);var canvasXY=RG.getCanvasXY(obj.canvas);tooltipObj.style.left=e.pageX-(parseFloat(tooltipObj.style.paddingLeft)+(width/2))+'px';tooltipObj.style.top=e.pageY-height-10+'px';if(parseFloat(tooltipObj.style.left)<=5){tooltipObj.style.left='5px';}\nif(parseFloat(tooltipObj.style.left)+parseFloat(tooltipObj.style.width)>window.innerWidth){tooltipObj.style.left=''\ntooltipObj.style.right='5px'}\nif(RG.isFixed(obj.canvas)){var scrollTop=window.scrollY||document.documentElement.scrollTop;tooltipObj.style.position='fixed';tooltipObj.style.top=e.pageY-scrollTop-height-10+'px';}\nif(obj.get('chart.tooltips.effect')==='fade'){for(var i=1;i<=10;++i){(function(index)\n{setTimeout(function()\n{tooltipObj.style.opacity=index/10;},index*25);})(i);}}else{tooltipObj.style.opacity=1;}\ntooltipObj.onmousedown=function(e){e.stopPropagation();}\ntooltipObj.onmouseup=function(e){e.stopPropagation();}\ntooltipObj.onclick=function(e){if(e.button==0){e.stopPropagation();}}\nRG.Registry.Set('chart.tooltip',tooltipObj);RG.fireCustomEvent(obj,'ontooltip');};RG.getTooltipTextFromDIV=function(text)\n{var result=/^id:(.*)/.exec(text);if(result&&result[1]&&document.getElementById(result[1])){text=document.getElementById(result[1]).innerHTML;}else if(result&&result[1]){text='';}\nreturn text;};RG.getTooltipWidth=function(text,obj)\n{var div=document.createElement('DIV');div.className=obj.Get('chart.tooltips.css.class');div.style.paddingLeft=RG.tooltips.padding;div.style.paddingRight=RG.tooltips.padding;div.style.fontFamily=RG.tooltips.font_face;div.style.fontSize=RG.tooltips.font_size;div.style.visibility='hidden';div.style.position='absolute';div.style.top='300px';div.style.left=0;div.style.display='inline';div.innerHTML=RG.getTooltipTextFromDIV(text);document.body.appendChild(div);return div.offsetWidth;};RG.hideTooltip=RG.HideTooltip=function()\n{var tooltip=RG.Registry.Get('chart.tooltip');var uid=arguments[0]&&arguments[0].uid?arguments[0].uid:null;if(tooltip&&tooltip.parentNode&&(!uid||uid==tooltip.__canvas__.uid)){tooltip.parentNode.removeChild(tooltip);tooltip.style.display='none';tooltip.style.visibility='hidden';RG.Registry.Set('chart.tooltip',null);}};RG.preLoadTooltipImages=RG.PreLoadTooltipImages=function(obj)\n{var tooltips=obj.Get('chart.tooltips');if(RG.hasTooltips(obj)){if(obj.type=='rscatter'){tooltips=[];for(var i=0;i<obj.data.length;++i){tooltips.push(obj.data[3]);}}\nfor(var i=0;i<tooltips.length;++i){var div=document.createElement('DIV');div.style.position='absolute';div.style.opacity=0;div.style.top='-100px';div.style.left='-100px';div.innerHTML=tooltips[i];document.body.appendChild(div);var img_tags=div.getElementsByTagName('IMG');for(var j=0;j<img_tags.length;++j){if(img_tags&&img_tags[i]){var img=document.createElement('IMG');img.style.position='absolute';img.style.opacity=0;img.style.top='-100px';img.style.left='-100px';img.src=img_tags[i].src\ndocument.body.appendChild(img);setTimeout(function(){document.body.removeChild(img);},250);}}\ndocument.body.removeChild(div);}}};RG.tooltips_mousemove=RG.Tooltips_mousemove=function(obj,e)\n{var shape=obj.getShape(e);var changeCursor_tooltips=false\nif(shape&&typeof(shape['index'])=='number'&&obj.Get('chart.tooltips')[shape['index']]){var text=RG.parseTooltipText(obj.Get('chart.tooltips'),shape['index']);if(text){changeCursor_tooltips=true;if(obj.Get('chart.tooltips.event')=='onmousemove'){if(!RG.Registry.Get('chart.tooltip')||RG.Registry.Get('chart.tooltip').__object__.uid!=obj.uid||RG.Registry.Get('chart.tooltip').__index__!=shape['index']){RG.hideTooltip();RG.Clear(obj.canvas);RG.redraw();RG.tooltip(obj,text,e.pageX,e.pageY,shape['index']);obj.Highlight(shape);}}}}else if(shape&&typeof(shape['index'])=='number'){var text=RG.parseTooltipText(obj.Get('chart.tooltips'),shape['index']);if(text){changeCursor_tooltips=true}}\nreturn changeCursor_tooltips;};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.common.zoom.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.zoom=RG.Zoom=function(e)\n{e=RGraph.fixEventObject(e);if(e&&e.target&&e.target.__canvas__){var canvas=e.target.__canvas__;}else if(e&&e.target&&e.target.__object__){var canvas=e.target.__object__.canvas;e.stopPropagation();}\nif(!canvas){var registry_canvas=RGraph.Registry.get('chart.contextmenu').__canvas__;if(registry_canvas){var canvas=registry_canvas;}}\nvar obj=canvas.__object__;var context=obj.context;var dataurl=canvas.toDataURL();var tmp=canvas;var coords=RG.getCanvasXY(canvas);var factor=obj.Get('chart.zoom.factor')-1;var x=coords[0];var y=coords[1];var img=document.createElement('img');img.className='RGraph_zoomed_canvas';img.style.border='1px solid #ccc';img.style.width=canvas.width+'px';img.style.height=canvas.height+'px';img.style.position='absolute';img.style.left=x+'px';img.style.top=y+'px';img.style.backgroundColor='white';img.style.opacity=obj.Get('chart.zoom.fade.in')?0:1;img.style.zIndex=99;img.src=dataurl;document.body.appendChild(img);RGraph.zoom_image=img;RGraph.zoom_image.obj=obj;img.onclick=function(e)\n{e=RGraph.fixEventObject(e);e.stopPropagation();return false;}\nvar width=parseInt(canvas.width);var height=parseInt(canvas.height);var frames=obj.Get('chart.zoom.frames');var delay=obj.Get('chart.zoom.delay');if(obj.Get('chart.zoom.hdir')=='center'){for(var i=1;i<=frames;++i){var newWidth=width*factor*(i/frames)+width;var rightHandEdge=x+canvas.width;var newLeft=(x+(canvas.width/2))-(newWidth/2);setTimeout(\"RGraph.zoom_image.style.width = '\"+String(newWidth)+\"px'; RGraph.zoom_image.style.left = '\"+newLeft+\"px'\",i*delay);}}else if(obj.Get('chart.zoom.hdir')=='left'){for(var i=1;i<=frames;++i){var newWidth=width*factor*(i/frames)+width;var rightHandEdge=x+canvas.width;var newLeft=rightHandEdge-newWidth;setTimeout(\"RGraph.zoom_image.style.width = '\"+String(newWidth)+\"px'; RGraph.zoom_image.style.left = '\"+newLeft+\"px'\",i*delay);}}else{for(var i=1;i<=frames;++i){var newWidth=width*factor*(i/frames)+width;setTimeout(\"RGraph.zoom_image.style.width = '\"+String(newWidth)+\"px'\",i*delay);}}\nif(obj.Get('chart.zoom.vdir')=='up'){for(var i=1;i<=frames;++i){var newHeight=(height*factor*(i/frames))+height;var bottomEdge=y+canvas.height;var newTop=bottomEdge-newHeight;setTimeout(\"RGraph.zoom_image.style.height = '\"+String(newHeight)+\"px'; RGraph.zoom_image.style.top = '\"+newTop+\"px'\",i*delay);}}else if(obj.Get('chart.zoom.vdir')=='center'){for(var i=1;i<=frames;++i){var newHeight=(height*factor*(i/frames))+height;var bottomEdge=(y+(canvas.height/2))+(newHeight/2);var newTop=bottomEdge-newHeight;setTimeout(\"RGraph.zoom_image.style.height = '\"+String(newHeight)+\"px'; RGraph.zoom_image.style.top = '\"+newTop+\"px'\",i*delay);}}else{for(var i=1;i<=frames;++i){setTimeout(\"RGraph.zoom_image.style.height = '\"+String(height*factor*(i/frames)+height)+\"px'\",i*delay);}}\nif(obj.Get('chart.zoom.fade.in')){for(var i=1;i<=frames;++i){setTimeout(\"RGraph.zoom_image.style.opacity = \"+Number(i/frames),i*(delay/2));}}\nif(obj.Get('chart.zoom.shadow')){for(var i=1;i<=frames;++i){setTimeout(\"RGraph.zoom_image.style.boxShadow = 'rgba(128,128,128,\"+Number(i/frames)/2+\") 0 0 25px'\",i*delay);setTimeout(\"RGraph.zoom_image.style.MozBoxShadow = 'rgba(128,128,128,\"+Number(i/frames)/2+\") 0 0 25px'\",i*delay);setTimeout(\"RGraph.zoom_image.style.WebkitBoxShadow = 'rgba(128,128,128,\"+Number(i/frames)/2+\") 0 0 25px'\",i*delay);}}\nvar div=document.createElement('DIV');div.style.backgroundColor='white';div.style.opacity=0;div.style.position='fixed';div.style.top=0;div.style.left=0;div.style.width=(screen.width+100)+'px';div.style.height=(screen.height+100)+'px';div.style.zIndex=98;div.onclick=div.oncontextmenu=function(e)\n{return RG.hideZoomedCanvas(e);}\ndiv.origHeight=div.style.height;document.body.appendChild(div);RG.zoom_background=div;for(var i=1;i<=frames;++i){setTimeout(\"RGraph.zoom_background.style.opacity = \"+(Number(i/frames)*0.8),i*(delay/2));}\nRG.fireCustomEvent(obj,'onzoom');}})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.cornergauge.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.CornerGauge=function(conf)\n{if(typeof conf==='object'&&typeof conf.min==='number'&&typeof conf.max==='number'&&typeof conf.value!=='undefined'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var min=conf.min;var max=conf.max;var value=conf.value;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var min=arguments[1];var max=arguments[2];var value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='cornergauge';this.min=min;this.max=max;this.value=RGraph.stringsToNumbers(value);this.angles={};this.angles.needle=[];this.centerpin={};this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.coordsText=[];this.original_colors=[];this.firstDraw=true;if(typeof(this.value)=='object'){for(var i=0;i<this.value.length;++i){if(this.value[i]>this.max)this.value[i]=max;if(this.value[i]<this.min)this.value[i]=min;}}else{if(this.value>this.max)this.value=max;if(this.value<this.min)this.value=min;}\nthis.properties={'chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.strokestyle':'black','chart.linewidth':2,'chart.title':'','chart.title.vpos':0.5,'chart.title.size':null,'chart.title.x':null,'chart.title.y':null,'chart.title.bold':true,'chart.text.font':'Arial','chart.text.color':'#666','chart.text.size':10,'chart.background.gradient.color1':'#ddd','chart.background.gradient.color2':'white','chart.shadow':true,'chart.shadow.color':'gray','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.units.pre':'','chart.units.post':'','chart.resizable':false,'chart.chart.resize.handle.background':null,'chart.adjustable':false,'chart.annotatable':false,'chart.annotate.color':'black','chart.colors.ranges':null,'chart.red.start':min+(0.9*(this.max-min)),'chart.green.end':min+(0.7*(this.max-min)),'chart.red.color':'red','chart.yellow.color':'yellow','chart.green.color':'#0f0','chart.value.text':true,'chart.value.text.units.pre':'','chart.value.text.units.post':'','chart.value.text.boxed':true,'chart.value.text.font':'Arial','chart.value.text.size':18,'chart.value.text.bold':false,'chart.value.text.decimals':0,'chart.centerpin.stroke':'rgba(0,0,0,0)','chart.centerpin.fill':null,'chart.centerpin.color':'blue','chart.needle.colors':['#ccc','#D5604D','red','green','yellow'],'chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph;var ca=this.canvas;var co=ca.getContext('2d');var prop=this.properties;var jq=jQuery;var pa=RG.Path;var win=window;var doc=document;var ma=Math;this.set=this.Set=function(name,value)\n{if(arguments.length===1&&typeof arguments[0]==='object'){RG.parseObjectStyleConfig(this,arguments[0]);return this;}\nname=name.toLowerCase();if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.currentValue=this.value;if(typeof this.gutterLeft=='undefined'){this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];}\nthis.radius=Math.min((ca.width-this.gutterLeft-this.gutterRight),(ca.height-this.gutterTop-this.gutterBottom));if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];this.centerx=(ca.width/2)-(this.radius/2)+Math.max(30,this.radius*0.1);this.centery=(ca.height/2)+(this.radius/2)-(this.radius*0.1);this.coordsText=[];if(typeof prop['chart.centerx']==='number')this.centerx=prop['chart.centerx'];if(typeof prop['chart.centery']==='number')this.centery=prop['chart.centery'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.DrawBackGround();this.DrawTickmarks();this.DrawColorBands();this.DrawLabel();this.DrawLabels();if(typeof this.value==='object'){for(var i=0,len=this.value.length;i<len;++i){this.DrawNeedle(i,this.value[i],this.radius-65);}}else{this.DrawNeedle(0,this.value,this.radius-65);}\nthis.DrawCenterpin();var size=prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2\nprop['chart.title.y']=this.centery+20-this.radius-((1.5*size)/2);RGraph.DrawTitle(this,prop['chart.title'],this.guttertop,this.centerx+(this.radius/2),size);if(prop['chart.contextmenu']){RGraph.ShowContext(this);}\nif(prop['chart.resizable']){RGraph.AllowResizing(this);}\nRGraph.InstallEventListeners(this);if(this.firstDraw){RG.fireCustomEvent(this,'onfirstdraw');this.firstDraw=false;this.firstDrawFunc();}\nRGraph.FireCustomEvent(this,'ondraw');return this;};this.drawBackGround=this.DrawBackGround=function()\n{if(prop['chart.shadow']){RGraph.SetShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth']?prop['chart.linewidth']:0.0001;co.beginPath();co.arc(this.centerx,this.centery,30,0,RGraph.TWOPI,false);co.stroke();co.beginPath();co.moveTo(this.centerx-20,this.centery+20);co.arc(this.centerx-20,this.centery+20,this.radius,RGraph.PI+RGraph.HALFPI,RGraph.TWOPI,false);co.closePath();co.fill();co.stroke();RG.NoShadow(this);co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth']?prop['chart.linewidth']:0.0001;co.beginPath();co.moveTo(this.centerx-20,this.centery+20);co.arc(this.centerx-20,this.centery+20,this.radius,RGraph.PI+RGraph.HALFPI,RGraph.TWOPI,false);co.closePath();co.stroke();RGraph.NoShadow(this);co.lineWidth=0;co.fillStyle=RGraph.RadialGradient(this,this.centerx,this.centery,0,this.centerx,this.centery,this.radius*0.5,prop['chart.background.gradient.color1'],prop['chart.background.gradient.color2']);co.beginPath();co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,30,0,RGraph.TWOPI,0);co.closePath();co.fill();co.beginPath();co.moveTo(this.centerx-20,this.centery+20);co.lineTo(this.centerx-20,this.centery+20-this.radius);co.arc(this.centerx-20,this.centery+20,this.radius,RGraph.PI+RGraph.HALFPI,RGraph.TWOPI,false);co.closePath();co.fill();co.beginPath();co.lineWidth=1;co.strokeStyle='#eee';for(var i=0;i<=5;++i){var p1=RG.getRadiusEndPoint(this.centerx,this.centery,(RGraph.HALFPI/5*i)+RGraph.PI+RGraph.HALFPI,30);var p2=RG.getRadiusEndPoint(this.centerx,this.centery,(RGraph.HALFPI/5*i)+RGraph.PI+RGraph.HALFPI,this.radius-90);co.moveTo(p1[0],p1[1]);co.lineTo(p2[0],p2[1]);}\nco.stroke();};this.drawNeedle=this.DrawNeedle=function(index,value,radius)\n{var grad=RG.RadialGradient(this,this.centerx,this.centery,0,this.centerx,this.centery,20,'rgba(0,0,0,0)',prop['chart.needle.colors'][index])\nthis.angles.needle[index]=(((value-this.min)/(this.max-this.min))*RG.HALFPI)+RG.PI+RG.HALFPI;co.lineWidth=1\nco.strokeStyle='rgba(0,0,0,0)';co.fillStyle=grad;co.beginPath();co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,10,this.angles.needle[index]-RG.HALFPI,this.angles.needle[index]-RG.HALFPI+0.000001,false);co.arc(this.centerx,this.centery,radius-30,this.angles.needle[index],this.angles.needle[index]+0.000001,false);co.arc(this.centerx,this.centery,10,this.angles.needle[index]+RG.HALFPI,this.angles.needle[index]+RG.HALFPI+0.000001,false);co.stroke();co.fill();};this.drawCenterpin=this.DrawCenterpin=function()\n{if(!prop['chart.centerpin.fill']){prop['chart.centerpin.fill']=RG.RadialGradient(this,this.centerx+5,this.centery-5,0,this.centerx+5,this.centery-5,20,'white',prop['chart.centerpin.color'])}\nco.strokeStyle=prop['chart.centerpin.stroke'];co.fillStyle=prop['chart.centerpin.fill'];co.beginPath();co.lineWidth=2;co.arc(this.centerx,this.centery,15,0,RGraph.TWOPI,false);co.stroke();co.fill();};this.drawLabels=this.DrawLabels=function()\n{var numLabels=6;co.fillStyle=prop['chart.text.color'];for(var i=0;i<numLabels;++i){co.beginPath();var num=Number(this.min+((this.max-this.min)*(i/(numLabels-1)))).toFixed(prop['chart.scale.decimals']);num=RG.number_format(this,num,prop['chart.units.pre'],prop['chart.units.post']);var angle=(i*18)/(180/RG.PI);RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':this.centerx+ma.sin(angle)*(this.radius-53),'y':this.centery-ma.cos(angle)*(this.radius-53),'text':String(num),'valign':'top','halign':'center','angle':90*(i/(numLabels-1)),'tag':'scale'});co.fill();}};this.drawTickmarks=this.DrawTickmarks=function()\n{var bigTicks=5;var smallTicks=25;for(var i=0;i<smallTicks;++i){co.beginPath();var angle=(RG.HALFPI/(smallTicks-1))*i\nco.lineWidth=1;co.arc(this.centerx,this.centery,this.radius-44,RG.PI+RG.HALFPI+angle,RG.PI+RG.HALFPI+angle+0.0001,false);co.arc(this.centerx,this.centery,this.radius-46,RG.PI+RG.HALFPI+angle,RG.PI+RG.HALFPI+angle+0.0001,false);co.stroke();}\nfor(var i=0;i<bigTicks;++i){co.beginPath();var angle=(RG.HALFPI/(bigTicks-1))*i\nco.lineWidth=1;co.arc(this.centerx,this.centery,this.radius-43,RG.PI+RG.HALFPI+angle,RG.PI+RG.HALFPI+angle+0.0001,false);co.arc(this.centerx,this.centery,this.radius-47,RG.PI+RG.HALFPI+angle,RG.PI+RG.HALFPI+angle+0.0001,false);co.stroke();}};this.DrawColorBands=function()\n{if(RG.is_array(prop['chart.colors.ranges'])){var ranges=prop['chart.colors.ranges'];for(var i=0,len=ranges.length;i<len;++i){co.fillStyle=ranges[i][2];co.lineWidth=0;co.beginPath();co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5),(((ranges[i][0]-this.min)/(this.max-this.min))*RG.HALFPI)+(RG.PI+RG.HALFPI),(((ranges[i][1]-this.min)/(this.max-this.min))*RG.HALFPI)+(RG.PI+RG.HALFPI),false);co.arc(this.centerx,this.centery,this.radius-54-10-(prop['chart.text.size']*1.5),(((ranges[i][1]-this.min)/(this.max-this.min))*RG.HALFPI)+(RG.PI+RG.HALFPI),(((ranges[i][0]-this.min)/(this.max-this.min))*RG.HALFPI)+(RG.PI+RG.HALFPI),true);co.closePath();co.fill();}\nreturn;}\nco.strokeStyle=prop['chart.green.color'];co.fillStyle=prop['chart.green.color'];var greenStart=RG.PI+RG.HALFPI;var greenEnd=greenStart+(RG.TWOPI-greenStart)*((prop['chart.green.end']-this.min)/(this.max-this.min))\nco.beginPath();co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5),greenStart,greenEnd,false);co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5)-10,greenEnd,greenStart,true);co.fill();co.strokeStyle=prop['chart.yellow.color'];co.fillStyle=prop['chart.yellow.color'];var yellowStart=greenEnd;var yellowEnd=(((prop['chart.red.start']-this.min)/(this.max-this.min))*RG.HALFPI)+RG.PI+RG.HALFPI;co.beginPath();co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5),yellowStart,yellowEnd,false);co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5)-10,yellowEnd,yellowStart,true);co.fill();co.strokeStyle=prop['chart.red.color'];co.fillStyle=prop['chart.red.color'];var redStart=yellowEnd;var redEnd=RGraph.TWOPI;co.beginPath();co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5),redStart,redEnd,false);co.arc(this.centerx,this.centery,this.radius-54-(prop['chart.text.size']*1.5)-10,redEnd,redStart,true);co.fill();};this.drawLabel=this.DrawLabel=function()\n{if(prop['chart.value.text']){co.strokeStyle=prop['chart.text.color'];co.fillStyle=prop['chart.text.color'];var value=typeof(this.value)=='number'?this.value.toFixed(prop['chart.value.text.decimals']):this.value;if(typeof(value)=='object'){for(var i=0;i<value.length;++i){value[i]=parseFloat(value[i]).toFixed(prop['chart.value.text.decimals']);}\nvalue=value.toString();}\nRG.Text2(this,{'font':prop['chart.value.text.font'],'size':prop['chart.value.text.size'],'x':this.centerx+(ma.cos((RG.PI/180)*45)*(this.radius/3)),'y':this.centery-(ma.sin((RG.PI/180)*45)*(this.radius/3)),'text':prop['chart.value.text.units.pre']+value+prop['chart.value.text.units.post'],'valign':'center','halign':'center','bounding':prop['chart.value.text.boxed'],'boundingFill':'white','bold':prop['chart.value.text.bold'],'tag':'value.text'});}};this.getShape=function(e){};this.getValue=function(e)\n{var mouseXY=RGraph.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var angle=RG.getAngleByXY(this.centerx,this.centery,mouseX,mouseY);if(angle>RG.TWOPI&&angle<(RG.PI+RG.HALFPI)){return null;}\nvar value=((angle-(RG.PI+RG.HALFPI))/(RG.TWOPI-(RG.PI+RG.HALFPI)))*(this.max-this.min);value=value+this.min;if(value<this.min){value=this.min}\nif(value>this.max){value=this.max}\nif(mouseX>this.centerx&&mouseY>this.centery){value=this.max;}\nreturn value;};this.getObjectByXY=function(e)\n{var mouseXY=RGraph.getMouseXY(e);if(mouseXY[0]>(this.centerx-5)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+5)&&RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1])<=this.radius){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){this.value=this.getValue(e);RG.Clear(ca);RG.RedrawCanvas(ca);RG.FireCustomEvent(this,'onadjust');}};this.getAngle=function(value)\n{if(value<this.min||value>this.max){return null;}\nvar angle=((value-this.min)/(this.max-this.min))*RG.HALFPI\nangle+=(RG.PI+RG.HALFPI);return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors.ranges']=RG.array_clone(prop['chart.colors.ranges']);this.original_colors['chart.green.color']=RG.array_clone(prop['chart.green.color']);this.original_colors['chart.yellow.color']=RG.array_clone(prop['chart.yellow.color']);this.original_colors['chart.red.color']=RG.array_clone(prop['chart.red.color']);}\nif(!RG.is_null(prop['chart.colors.ranges'])){for(var i=0;i<prop['chart.colors.ranges'].length;++i){prop['chart.colors.ranges'][i][2]=this.parseSingleColorForGradient(prop['chart.colors.ranges'][i][2]);}}else{prop['chart.green.color']=this.parseSingleColorForGradient(prop['chart.green.color']);prop['chart.yellow.color']=this.parseSingleColorForGradient(prop['chart.yellow.color']);prop['chart.red.color']=this.parseSingleColorForGradient(prop['chart.red.color']);}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){var parts=RegExp.$1.split(':');var radius_start=this.radius-54-prop['chart.text.size'];var radius_end=radius_start-15;var grad=co.createRadialGradient(this.centerx,this.centery,radius_start,this.centerx,this.centery,radius_end);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nthis[type]=func;return this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var opt=arguments[0];var callback=arguments[1];var numFrames=30;var frame=0;var obj=this;if(typeof this.value==='number'){var origValue=Number(this.currentValue);if(this.currentValue===null){this.currentValue=this.min;origValue=this.min;}\nvar newValue=this.value;var diff=newValue-origValue;var step=(diff/numFrames);var frame=0;var iterator=function()\n{frame++;obj.value=((frame/numFrames)*diff)+origValue\nif(obj.value>obj.max)obj.value=obj.max;if(obj.value<obj.min)obj.value=obj.min;RGraph.Clear(obj.canvas);RGraph.RedrawCanvas(obj.canvas);if(frame<30){RGraph.Effects.updateCanvas(iterator);}else if(typeof callback==='function'){callback(obj);}};iterator();}else{if(obj.currentValue==null){obj.currentValue=[];for(var i=0,len=obj.value.length;i<len;++i){obj.currentValue[i]=obj.min;}\norigValue=RG.array_clone(obj.currentValue);}\nvar origValue=RG.array_clone(obj.currentValue);var newValue=RG.array_clone(obj.value);var diff=[];var step=[];for(var i=0,len=newValue.length;i<len;++i){diff[i]=newValue[i]-Number(obj.currentValue[i]);step[i]=(diff[i]/numFrames);}\nvar max=this.max;var min=this.min;var iterator=function()\n{frame++;for(var i=0,len=obj.value.length;i<len;++i){obj.value[i]=((frame/numFrames)*diff[i])+origValue[i];if(obj.value[i]>max)obj.value[i]=max;if(obj.value[i]<min)obj.value[i]=min;RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);}\nif(frame<30){RG.Effects.updateCanvas(iterator);}else if(typeof callback==='function'){callback(obj);}};iterator();}\nreturn this;}\nRG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.background.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Background=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id);}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.original_colors=[];this.firstDraw=true;this.type='drawing.background';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.createUID();this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.width':1,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':20,'chart.background.grid.dashed':false,'chart.background.grid.dotted':false,'chart.background.image':null,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.text.color':'black','chart.text.size':12,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.linewidth':1,'chart.title':'','chart.title.size':null,'chart.title.font':null,'chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.color':'black','chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.xaxis.pos':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':'black','chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.yaxis.pos':null,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.BACKGROUND] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa=RG.Path,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nRG.drawBackgroundImage(this);RG.Background.draw(this);RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(mouseX>=this.gutterLeft&&mouseX<=(ca.width-this.gutterRight)&&mouseY>=this.gutterTop&&mouseY<=(ca.height-this.gutterBottom)){var tooltip=prop['chart.tooltips']?prop['chart.tooltips'][0]:null\nreturn{0:this,1:0,2:tooltip,'object':this,'index':0,'tooltip':tooltip};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,'b r % % % % f % s %',prop['chart.gutter.left'],prop['chart.gutter.top'],ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'],ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'],prop['chart.highlight.fill'],prop['chart.highlight.stroke']);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.background.grid.color']=RG.arrayClone(prop['chart.background.grid.color']);this.original_colors['chart.strokestyle']=RG.arrayClone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);}\nprop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createLinearGradient(this.gutterLeft,this.gutterTop,ca.width-this.gutterRight,ca.height-this.gutterRight),diff=1/(parts.length-1);for(var j=0;j<parts.length;j+=1){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.circle.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Circle=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.radius==='number'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),x=conf.x,y=conf.y,radius=conf.radius,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),x=arguments[1],y=arguments[2],radius=arguments[3];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.original_colors=[];this.firstDraw=true;this.centerx=x;this.centery=y;this.radius=radius;this.type='drawing.circle';this.isRGraph=true;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.createUID();this.properties={'chart.strokestyle':'rgba(0,0,0,0)','chart.fillstyle':'red','chart.events.click':null,'chart.events.mousemove':null,'chart.shadow':false,'chart.shadow.color':'gray','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':5,'chart.highlight.stroke':'black','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.linewidth':2,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.CIRCLE] No canvas support');return;}\nthis.coords=[[this.centerx,this.centery,this.radius]];this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math;if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\npa2(co,'b lw %',prop['chart.linewidth']);if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\npa2(co,'b a % % % % % % f % s %',this.coords[0][0],this.coords[0][1],this.radius,0,RG.TWOPI,false,prop['chart.fillstyle'],prop['chart.strokestyle']);RG.noShadow(this);RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1])<=this.radius){return{0:this,1:this.centerx,2:this.centery,3:this.radius,4:null,5:0,'object':this,'x':this.centerx,'y':this.centery,'radius':this.radius,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,'b a % % % % % % f % s %',this.centerx,this.centery,this.radius+0.5,0,RG.TWOPI,false,prop['chart.highlight.fill'],prop['chart.highlight.stroke']);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.array_clone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nprop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius),diff=1/(parts.length-1);for(var j=0;j<parts.length;j+=1){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.image.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Image=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.src==='string'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),x=conf.x,y=conf.y,src=conf.src,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),x=arguments[1],y=arguments[2],src=arguments[3];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.colorsParsed=false;this.canvas.__object__=this;this.alignmentProcessed=false;this.original_colors=[];this.firstDraw=true;this.x=x;this.y=y;this.src=src;this.img=new Image();this.img.src=this.src;this.type='drawing.image';this.isRGraph=true;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.src':null,'chart.width':null,'chart.height':null,'chart.halign':'left','chart.valign':'top','chart.events.mousemove':null,'chart.events.click':null,'chart.shadow':false,'chart.shadow.color':'gray','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':5,'chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.alpha':1,'chart.border':false,'chart.border.color':'black','chart.border.linewidth':1,'chart.border.radius':0,'chart.background.color':'rgba(0,0,0,0)','chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.IMAGE] No canvas support');return;}\nthis.coords=[];this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');var obj=this;this.img.onload=function()\n{if(!obj.colorsParsed){obj.parseColors();obj.colorsParsed=true;}\nobj.width=this.width;obj.height=this.height;if(!this.alignmentProcessed){var customWidthHeight=(typeof obj.properties['chart.width']=='number'&&typeof obj.properties['chart.width']=='number');if(obj.properties['chart.halign']==='center'){obj.x-=customWidthHeight?(obj.properties['chart.width']/2):(this.width/2);}else if(obj.properties['chart.halign']=='right'){obj.x-=customWidthHeight?obj.properties['chart.width']:this.width;}\nif(obj.properties['chart.valign']==='center'){obj.y-=customWidthHeight?(obj.properties['chart.height']/2):(this.height/2);}else if(obj.properties['chart.valign']=='bottom'){obj.y-=customWidthHeight?obj.properties['chart.height']:this.height;}\nthis.alignmentProcessed=true;}}\nif(this.img.complete||this.img.readyState===4){this.img.onload();}\nif(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nvar oldAlpha=co.globalAlpha;co.globalAlpha=prop['chart.alpha'];if(prop['chart.border']){co.strokeStyle=prop['chart.border.color'];co.lineWidth=prop['chart.border.linewidth'];var borderRadius=0;if(this.width||this.height){borderRadius=ma.min(this.width/2,this.height/2)}\nif((prop['chart.width']/2)>borderRadius&&(prop['chart.height']/2)>borderRadius){borderRadius=ma.min((prop['chart.width']/2),(prop['chart.height']/2))}\nif(prop['chart.border.radius']<borderRadius){borderRadius=prop['chart.border.radius'];}\nco.beginPath();this.roundedRect(ma.round(this.x)-ma.round(co.lineWidth/2),ma.round(this.y)-ma.round(co.lineWidth/2),(prop['chart.width']||this.img.width)+co.lineWidth,(prop['chart.height']||this.img.height)+co.lineWidth,borderRadius);}\nif(borderRadius){co.save();this.drawBackgroundColor(borderRadius);co.beginPath();this.roundedRect(ma.round(this.x)-ma.round(co.lineWidth/2),ma.round(this.y)-ma.round(co.lineWidth/2),(prop['chart.width']||this.img.width)+co.lineWidth,(prop['chart.height']||this.img.height)+co.lineWidth,borderRadius);co.clip();}else{this.drawBackgroundColor(0);}\nRG.noShadow(this);if(typeof prop['chart.height']==='number'||typeof prop['chart.width']==='number'){co.drawImage(this.img,ma.round(this.x),ma.round(this.y),prop['chart.width']||this.width,prop['chart.height']||this.height);}else{co.drawImage(this.img,ma.round(this.x),ma.round(this.y));}\nif(borderRadius){co.restore();}\nif(prop['chart.border']){RG.noShadow(this);co.stroke();}\nco.globalAlpha=oldAlpha;this.img.onload=function()\n{RG.redrawCanvas(ca);obj.coords[0]=[ma.round(obj.x),ma.round(obj.y),typeof prop['chart.width']==='number'?prop['chart.width']:this.width,typeof prop['chart.height']=='number'?prop['chart.height']:this.height];}\nRG.noShadow(this);RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(this.coords&&this.coords[0]&&mouseXY[0]>=this.coords[0][0]&&mouseXY[0]<=(this.coords[0][0]+this.coords[0][2])&&mouseXY[1]>=this.coords[0][1]&&mouseXY[1]<=(this.coords[0][1]+this.coords[0][3])){return{0:this,1:this.coords[0][0],2:this.coords[0][1],3:this.coords[0][2],4:this.coords[0][3],5:0,'object':this,'x':this.coords[0][0],'y':this.coords[0][1],'width':this.coords[0][2],'height':this.coords[0][3],'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,['b','r',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],'f',prop['chart.highlight.fill'],'s',prop['chart.highlight.stroke']]);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nprop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createLinearGradient(this.x,this.y,this.x+this.img.width,this.y),diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.roundedRect=function(x,y,width,height,radius)\n{co.save();co.translate(x,y);co.moveTo(width/2,0);co.arcTo(width,0,width,height,ma.min(height/2,radius));co.arcTo(width,height,0,height,ma.min(width/2,radius));co.arcTo(0,height,0,0,ma.min(height/2,radius));co.arcTo(0,0,radius,0,ma.min(width/2,radius));co.lineTo(width/2,0);co.restore();};this.drawBackgroundColor=function(borderRadius)\n{co.beginPath();co.fillStyle=prop['chart.background.color'];this.roundedRect(ma.round(this.x)-ma.round(co.lineWidth/2),ma.round(this.y)-ma.round(co.lineWidth/2),(prop['chart.width']||this.img.width)+co.lineWidth,(prop['chart.height']||this.img.height)+co.lineWidth,borderRadius);co.fill();};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.marker1.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Marker1=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.radius=='number'&&typeof conf.id==='string'&&typeof conf.text==='string'){var id=conf.id,canvas=document.getElementById(id),x=conf.x,y=conf.y,radius=conf.radius,text=conf.text,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),x=arguments[1],y=arguments[2],radius=arguments[3],text=arguments[4];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext(\"2d\");this.colorsParsed=false;this.canvas.__object__=this;this.original_colors=[];this.firstDraw=true;this.centerx=x;this.centery=y;this.radius=radius;this.text=text;this.type='drawing.marker1';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.strokestyle':'black','chart.fillstyle':'white','chart.linewidth':2,'chart.text.color':'black','chart.text.size':12,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.shadow':true,'chart.shadow.color':'#aaa','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,0,0,0.7)','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.align':'center','chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.MARKER1] No canvas support');return;}\nthis.$0={};this.coords=[];this.coordsText=[];if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');var r=this.radius;if(prop['chart.align']=='left'){this.markerCenterx=this.centerx-r-r-3;this.markerCentery=this.centery-r-r-3;}else if(prop['chart.align']=='right'){this.markerCenterx=this.centerx+r+r+3;this.markerCentery=this.centery-r-r-3;}else{this.markerCenterx=this.centerx;this.markerCentery=this.centery-r-r-3;}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.coordsText=[];pa2(co,['b','lw',prop['chart.linewidth']]);if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nthis.drawMarker();pa2(co,['c','s',prop['chart.strokestyle'],'f',prop['chart.fillstyle']]);RG.noShadow(this);co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size'],x:this.coords[0][0]-1,y:this.coords[0][1]-1,text:this.text,valign:'center',halign:'center',tag:'labels'});RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];co.beginPath();this.drawMarker();if(co.isPointInPath(mouseXY[0],mouseXY[1])){return{0:this,1:this.coords[0][0],2:this.coords[0][1],3:this.coords[0][2],4:0,'object':this,'x':this.coords[0][0],'y':this.coords[0][1],'radius':this.coords[0][2],'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{co.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];this.drawMarker();co.closePath();co.stroke();co.fill();}}};this.drawMarker=this.DrawMarker=function()\n{var r=this.radius;if(prop['chart.align']==='left'){var x=this.markerCenterx,y=this.markerCentery;pa2(co,['a',x,y,r,RG.HALFPI,RG.TWOPI,false]);pa2(co,['qc',x+r,y+r,x+r+r,y+r+r]);pa2(co,['qc',x+r,y+r,x,y+r]);}else if(prop['chart.align']==='right'){var x=this.markerCenterx,y=this.markerCentery;pa2(co,['a',x,y,r,RG.HALFPI,RG.PI,true]);pa2(co,['qc',x-r,y+r,x-r-r,y+r+r]);pa2(co,['qc',x-r,y+r,x,y+r]);}else{var x=this.markerCenterx,y=this.markerCentery;pa2(co,['a',x,y,r,RG.HALFPI/2,RG.PI-(RG.HALFPI/2),true]);pa2(co,['qc',x,y+r+(r/4),x,y+r+r-2]);pa2(co,['qc',x,y+r+(r/4),x+(ma.cos(RG.HALFPI/2)*r),y+(ma.sin(RG.HALFPI/2)*r)]);}\nthis.coords[0]=[x,y,r];};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.arrayClone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.arrayClone(prop['chart.strokestyle']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.text.color']=RG.arrayClone(prop['chart.text.color']);}\nprop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createRadialGradient(this.markerCenterx,this.markerCentery,0,this.markerCenterx,this.markerCentery,this.radius),diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.marker2.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Marker2=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.id==='string'&&typeof conf.text==='string'){var id=conf.id,canvas=document.getElementById(id),x=conf.x,y=conf.y,text=conf.text,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),x=arguments[1],y=arguments[2],text=arguments[3];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d')\nthis.colorsParsed=false;this.canvas.__object__=this;this.original_colors=[];this.firstDraw=true;this.x=x;this.y=y;this.text=text;this.type='drawing.marker2';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.strokestyle':'black','chart.fillstyle':'white','chart.text.color':'black','chart.text.size':12,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.shadow':true,'chart.shadow.color':'gray','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':5,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.voffset':20,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.MARKER2] No canvas support');return;}\nthis.coords=[];this.coordsText=[];this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{co.lineWidth=1;RG.fireCustomEvent(this,'onbeforedraw');this.metrics=RG.measureText(this.text,prop['chart.text.bold'],prop['chart.text.font'],prop['chart.text.size']);if(this.x+this.metrics[0]>=ca.width){this.alignRight=true;}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nvar x=this.alignRight?this.x-this.metrics[0]-6:this.x,y=this.y-6-prop['chart.voffset']-this.metrics[1],width=this.metrics[0]+6,height=this.metrics[1]+6;this.coords[0]=[x,y,width,height];this.coordsText=[];co.lineWidth=prop['chart.linewidth'];if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.fillstyle'];co.strokeRect(x+(this.alignRight?width:0),y,0,height+prop['chart.voffset']-6);co.strokeRect(x,y,width,height);co.fillRect(x,y,width,height);RG.noShadow(this);co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size'],x:ma.round(this.x)-(this.alignRight?this.metrics[0]+3:-3),y:this.y-3-prop['chart.voffset'],text:this.text,valign:'bottom',halign:'left',tag:'labels'});this.coords[0].push([x,y,width,height]);RG.noShadow(this);co.textBaseline='alphabetic';RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(mouseX>=this.coords[0][0]&&mouseX<=(this.coords[0][0]+this.coords[0][2])){if(mouseY>=this.coords[0][1]&&mouseY<=(this.coords[0][1]+this.coords[0][3])){return{0:this,1:this.coords[0][0],2:this.coords[0][1],3:this.coords[0][2],4:this.coords[0][3],5:0,'object':this,'x':this.coords[0][0],'y':this.coords[0][1],'width':this.coords[0][2],'height':this.coords[0][3],'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,['b','r',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],'f',prop['chart.highlight.fill'],'s',prop['chart.highlight.stroke']]);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.array_clone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.text.color']=RG.array_clone(prop['chart.text.color']);}\nprop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createLinearGradient(this.x,this.y,this.x+this.metrics[0],this.y),diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.marker3.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Marker3=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.id==='string'&&typeof conf.radius==='number'){var id=conf.id,canvas=document.getElementById(id),x=conf.x,y=conf.y,radius=conf.radius,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),x=arguments[1],y=arguments[2],radius=arguments[3];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d')\nthis.colorsParsed=false;this.canvas.__object__=this;this.original_colors=[];this.firstDraw=true;this.actualRadius=0;this.alpha=1;this.centerx=x;this.centery=y;this.radius=radius;this.type='drawing.marker3';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.createUID();this.properties={'chart.fillstyle':'rgba(255,255,255,1)','chart.delay':50,'chart.events.click':null,'chart.events.mousemove':null,'chart.highlight.fill':'rgba(255,0,0,1.0)','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.MARKER3] No canvas support');return;}\nthis.coords=[];this.coordsText=[];this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math;if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{co.globalAlpha=this.alpha;pa2(co,['b','a',this.centerx,this.centery,this.actualRadius,0,2*Math.PI,false,'a',this.centerx,this.centery,ma.max(this.actualRadius-8,0),2*Math.PI,0,true,'f',prop['chart.fillstyle']]);this.alpha=this.actualRadius?1-((this.actualRadius*0.75)/this.radius):1;co.globalAlpha=1;if(this.actualRadius<this.radius){this.actualRadius+=2;}else if(this.actualRadius>=this.radius){this.actualRadius=0;this.alpha=1;}\nif(!this.TIMER){var obj=this;setInterval(function()\n{RG.redrawCanvas(ca);},prop['chart.delay']);this.TIMER=true;}\nRG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1])<=this.radius){return{0:this,1:this.centerx,2:this.centery,3:this.radius,4:null,5:0,'object':this,'x':this.centerx,'y':this.centery,'radius':this.radius,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,['b','r',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],'f',prop['chart.highlight.fill'],'s',prop['chart.highlight.stroke']]);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.arrayClone(prop['chart.fillstyle']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);}\nprop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius),diff=1/(parts.length-1);for(var j=0;j<parts.length;j+=1){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.poly.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Poly=function(conf)\n{if(typeof conf==='object'&&typeof conf.coords==='object'&&typeof conf.id==='string'){var id=conf.id,coords=conf.coords,parseConfObjectForOptions=true;}else{var id=conf,coords=arguments[1];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.colorsParsed=false;this.canvas.__object__=this;this.coords=coords;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.type='drawing.poly';this.isRGraph=true;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.createUID();this.properties={'chart.linewidth':1,'chart.strokestyle':'black','chart.fillstyle':'red','chart.events.click':null,'chart.events.mousemove':null,'chart.tooltips':null,'chart.tooltips.override':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.tooltips.highlight':true,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.shadow':false,'chart.shadow.color':'rgba(0,0,0,0.2)','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':5,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.POLY] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math;if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.coordsText=[];if(prop['chart.shadow']){co.shadowColor=prop['chart.shadow.color'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];co.shadowBlur=prop['chart.shadow.blur'];}\nco.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.fillstyle'];this.drawPoly();co.lineWidth=prop['chart.linewidth'];RG.noShadow(this);RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.drawPoly=this.DrawPoly=function()\n{var coords=this.coords;pa2(co,['b','m',coords[0][0],coords[0][1]]);for(var i=1,len=coords.length;i<len;++i){co.lineTo(coords[i][0],coords[i][1]);}\npa2(co,['lw',prop['chart.linewidth'],'c','f',co.fillStyle,'s',co.strokeStyle]);};this.getShape=function(e)\n{var coords=this.coords,mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];var old_strokestyle=co.strokeStyle,old_fillstyle=co.fillStyle;co.beginPath();co.strokeStyle='rgba(0,0,0,0)';co.fillStyle='rgba(0,0,0,0)';this.drawPoly();co.strokeStyle=old_strokestyle;co.fillStyle=old_fillstyle;if(co.isPointInPath(mouseX,mouseY)){return{0:this,1:this.coords,2:0,'object':this,'coords':this.coords,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{co.fillStyle=prop['chart.fillstyle'];if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,['b','fu',function(obj){obj.drawPoly();},'f',prop['chart.highlight.fill'],'s',prop['chart.highlight.stroke']]);}}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.array_clone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nvar func=this.parseSingleColorForGradient;prop['chart.fillstyle']=func(prop['chart.fillstyle']);prop['chart.strokestyle']=func(prop['chart.strokestyle']);prop['chart.highlight.stroke']=func(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=func(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createLinearGradient(0,0,ca.width,0),diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.rect.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Rect=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.width==='number'&&typeof conf.height==='number'&&typeof conf.id==='string'){var id=conf.id,x=conf.x,y=conf.y,width=conf.width,height=conf.height,parseConfObjectForOptions=true;}else{var id=conf,x=arguments[1],y=arguments[2],width=arguments[3],height=arguments[4];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.colorsParsed=false;this.canvas.__object__=this;this.original_colors=[];this.coordsText=[];this.firstDraw=true;this.type='drawing.rect';this.isRGraph=true;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.strokestyle':'rgba(0,0,0,0)','chart.fillstyle':'red','chart.events.click':null,'chart.events.mousemove':null,'chart.shadow':false,'chart.shadow.color':'gray','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':5,'chart.highlight.stroke':'black','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.tooltips.valign':'top','chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.RECT] No canvas support');return;}\nthis.coords=[[Math.round(x),Math.round(y),width,height]];this.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math;if(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');this.coordsText=[];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\npa2(co,['b']);if(prop['chart.shadow']){pa2(co,['sc',prop['chart.shadow.color'],'sx',prop['chart.shadow.offsetx'],'sy',prop['chart.shadow.offsety'],'sb',prop['chart.shadow.blur']]);}\npa2(co,['r',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],'f',prop['chart.fillstyle']]);RG.NoShadow(this);pa2(co,['s',prop['chart.strokestyle']]);RG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];for(var i=0,len=this.coords.length;i<len;i++){var coords=this.coords[i];var left=coords[0],top=coords[1],width=coords[2],height=coords[3];if(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height)){return{0:this,1:left,2:top,3:width,4:height,5:0,'object':this,'x':left,'y':top,'width':width,'height':height,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.rect(this,shape);}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.fillstyle']=RG.array_clone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nprop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),grad=co.createLinearGradient(0,0,ca.width,0),diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.text.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.Text=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.y==='number'&&typeof conf.id==='string'){var id=conf.id\nvar x=conf.x;var y=conf.y;var text=String(conf.text);var parseConfObjectForOptions=true;}else{var id=conf;var x=arguments[1];var y=arguments[2];var text=arguments[3];}\nthis.id=id;this.canvas=document.getElementById(id);this.context=this.canvas.getContext('2d');this.colorsParsed=false;this.canvas.__object__=this;this.x=x;this.y=y;this.text=String(text);this.coords=[];this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.type='drawing.text';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.size':10,'chart.font':'Arial, Verdana, sans-serif','chart.bold':false,'chart.angle':0,'chart.colors':['black'],'chart.events.click':null,'chart.events.mousemove':null,'chart.highlight.stroke':'#ccc','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.bounding':false,'chart.bounding.fill':'rgba(255,255,255,0.7)','chart.bounding.stroke':'#777','chart.bounding.shadow':false,'chart.bounding.shadow.color':'#ccc','chart.bounding.shadow.blur':3,'chart.bounding.shadow.offsetx':3,'chart.bounding.shadow.offsety':3,'chart.marker':false,'chart.halign':'left','chart.valign':'bottom','chart.link':null,'chart.link.target':'_self','chart.link.options':'','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.clearto':'rgba(0,0,0,0)','chart.shadow':false,'chart.shadow.color':'#ccc','chart.shadow.offsetx':2,'chart.shadow.offsety':2,'chart.shadow.blur':3}\nif(!this.canvas){alert('[DRAWING.TEXT] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.coords=[];this.coordsText=[];var dimensions=RG.measureText(this.text,prop['chart.text.bold'],prop['chart.text.font'],prop['chart.text.size']);co.fillStyle=prop['chart.colors'][0];if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nvar ret=RG.text2(this,{font:prop['chart.font'],size:prop['chart.size'],x:this.x,y:this.y,text:this.text,bold:prop['chart.bold'],angle:prop['chart.angle'],bounding:prop['chart.bounding'],'bounding.fill':prop['chart.bounding.fill'],'bounding.stroke':prop['chart.bounding.stroke'],'bounding.shadow':prop['chart.bounding.shadow'],'bounding.shadow.color':prop['chart.bounding.shadow.color'],'bounding.shadow.blur':prop['chart.bounding.shadow.blur'],'bounding.shadow.offsetx':prop['chart.bounding.shadow.offsetx'],'bounding.shadow.offsety':prop['chart.bounding.shadow.offsety'],marker:prop['chart.marker'],halign:prop['chart.halign'],valign:prop['chart.valign']});if(prop['chart.shadow']){RG.noShadow(this);}\nthis.coords.push({0:ret.x,'x':ret.x,1:ret.y,'y':ret.y,2:ret.width,'width':ret.width,3:ret.height,'height':ret.height});RG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var prop=this.properties;var coords=this.coords;var mouseXY=RGraph.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];for(var i=0,len=this.coords.length;i<len;i++){var left=coords[i].x;var top=coords[i].y;var width=coords[i].width;var height=coords[i].height;if(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height)){return{0:this,1:left,2:top,3:width,4:height,5:0,'object':this,'x':left,'y':top,'width':width,'height':height,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors'])[0];this.original_colors['chart.fillstyle']=RG.array_clone(prop['chart.fillstyle']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nprop['chart.colors'][0]=this.parseSingleColorForGradient(prop['chart.colors'][0]);prop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,0,ca.width,0);var diff=1/(parts.length-1);grad.addColorStop(0,RGraph.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.xaxis.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.XAxis=function(conf)\n{if(typeof conf==='object'&&typeof conf.y==='number'&&typeof conf.id==='string'){var id=conf.id\nvar y=conf.y;var parseConfObjectForOptions=true;}else{var id=conf;var y=arguments[1];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.y=y;this.coords=[];this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.type='drawing.xaxis';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.gutter.left':25,'chart.gutter.right':25,'chart.labels':null,'chart.labels.position':'section','chart.colors':['black'],'chart.title.color':null,'chart.text.color':null,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.align':'bottom','chart.numlabels':5,'chart.scale.visible':true,'chart.scale.formatter':null,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.invert':false,'chart.scale.zerostart':true,'chart.units.pre':'','chart.units.post':'','chart.title':'','chart.numticks':null,'chart.hmargin':0,'chart.linewidth':1,'chart.noendtick.left':false,'chart.noendtick.right':false,'chart.noxaxis':false,'chart.max':null,'chart.min':0,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.events.click':null,'chart.events.mousemove':null,'chart.xaxispos':'bottom','chart.yaxispos':'left','chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.XAXIS] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.labels'&&!prop['chart.numxticks']){prop['chart.numxticks']=value.length;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];if(!prop['chart.text.color'])prop['chart.text.color']=prop['chart.colors'][0];if(!prop['chart.title.color'])prop['chart.title.color']=prop['chart.colors'][0];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.DrawXAxis();RG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.gutterLeft&&mouseX<=(ca.width-this.gutterRight)&&mouseY>=this.y-(prop['chart.align']=='top'?(prop['chart.text.size']*1.5)+5:0)&&mouseY<=(this.y+(prop['chart.align']=='top'?0:(prop['chart.text.size']*1.5)+5))){var x=this.gutterLeft;var y=this.y;var w=ca.width-this.gutterLeft-this.gutterRight;var h=15;return{0:this,1:x,2:y,3:w,4:h,5:0,'object':this,'x':x,'y':y,'width':w,'height':h,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);}\nprop['chart.colors'][0]=this.parseSingleColorForGradient(prop['chart.colors'][0]);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.drawXAxis=this.DrawXAxis=function()\n{var gutterLeft=prop['chart.gutter.left'],gutterRight=prop['chart.gutter.right'],x=this.gutterLeft,y=this.y,min=+prop['chart.min'],max=+prop['chart.max'],labels=prop['chart.labels'],labels_position=prop['chart.labels.position'],color=prop['chart.colors'][0],title_color=prop['chart.title.color'],label_color=prop['chart.text.color'],width=ca.width-this.gutterLeft-this.gutterRight,font=prop['chart.text.font'],size=prop['chart.text.size'],align=prop['chart.align'],numlabels=prop['chart.numlabels'],formatter=prop['chart.scale.formatter'],decimals=Number(prop['chart.scale.decimals']),invert=prop['chart.scale.invert'],scale_visible=prop['chart.scale.visible'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],title=prop['chart.title']\nnumticks=prop['chart.numticks'],hmargin=prop['chart.hmargin'],linewidth=prop['chart.linewidth'],noleftendtick=prop['chart.noendtick.left'],norightendtick=prop['chart.noendtick.right'],noxaxis=prop['chart.noxaxis'],xaxispos=prop['chart.xaxispos'],yaxispos=prop['chart.yaxispos']\nif(RG.is_null(numticks)){if(labels&&labels.length){numticks=labels.length;}else if(!labels&&max!=0){numticks=10;}else{numticks=numlabels;}}\nco.lineWidth=linewidth+0.001;co.strokeStyle=color;if(!noxaxis){pa2(co,['b','m',x,ma.round(y),'l',x+width,ma.round(y),'s',co.strokeStyle]);co.beginPath();for(var i=(noleftendtick?1:0);i<=(numticks-(norightendtick?1:0));++i){co.moveTo(ma.round(x+((width/numticks)*i)),xaxispos=='center'?(align=='bottom'?y-3:y+3):y);co.lineTo(ma.round(x+((width/numticks)*i)),y+(align=='bottom'?3:-3));}\nco.stroke();}\nco.fillStyle=label_color;if(labels){numlabels=labels.length;var h=0;var l=0;var single_line=RG.MeasureText('Mg',false,font,size);for(var i=0,len=labels.length;i<len;++i){var dimensions=RG.MeasureText(labels[i],false,font,size);var h=ma.max(h,dimensions[1]);var l=ma.max(l,labels[i].split('\\r\\n').length);}\nfor(var i=0,len=labels.length;i<len;++i){RG.text2(this,{'font':font,'size':size,'x':labels_position=='edge'?((((width-hmargin-hmargin)/(labels.length-1))*i)+gutterLeft+hmargin):((((width-hmargin-hmargin)/labels.length)*i)+((width/labels.length)/2)+gutterLeft+hmargin),'y':align=='bottom'?y+3:y-3-h+single_line[1],'text':String(labels[i]),'valign':align=='bottom'?'top':'bottom','halign':'center','tag':'labels'});}}else if(scale_visible){if(max===null){alert('[DRAWING.XAXIS] If not specifying axis.labels you must specify axis.max!');}\nif(yaxispos=='center'){width/=2;var additionalX=width;}else{var additionalX=0;}\nfor(var i=0;i<=numlabels;++i){if(i==0&&!prop['chart.scale.zerostart']){continue;}\nvar original=(((max-min)/numlabels)*i)+min;var hmargin=prop['chart.hmargin'];var text=String(typeof(formatter)=='function'?formatter(this,original):RG.numberFormat(this,original.toFixed(original===0?0:decimals),units_pre,units_post));if(invert){var x=((width-hmargin-((width-hmargin-hmargin)/numlabels)*i))+gutterLeft+additionalX;}else{var x=(((width-hmargin-hmargin)/numlabels)*i)+gutterLeft+hmargin+additionalX;}\nRG.Text2(this,{'font':font,'size':size,'x':x,'y':align=='bottom'?y+3:y-3,'text':text,'valign':align=='bottom'?'top':'bottom','halign':'center','tag':'scale'});}\nif(yaxispos=='center'){for(var i=0;i<numlabels;++i){var original=(((max-min)/numlabels)*(numlabels-i))+min;var hmargin=prop['chart.hmargin'];var text=String(typeof(formatter)=='function'?formatter(this,original):RG.number_format(this,original.toFixed(decimals),units_pre,units_post));if(invert){var x=((width-hmargin-((width-hmargin-hmargin)/numlabels)*i))+gutterLeft;}else{var x=(((width-hmargin-hmargin)/numlabels)*i)+gutterLeft+hmargin;}\nRG.text2(this,{'font':font,'size':size,'x':x,'y':align=='bottom'?y+size+2:y-size-2,'text':'-'+text,'valign':'center','halign':'center','tag':'scale'});}}}\nif(title){var dimensions=RG.MeasureText(title,false,font,size+2);co.fillStyle=title_color\nRG.Text2(this,{'font':font,'size':size+2,'x':(ca.width-this.gutterLeft-this.gutterRight)/2+this.gutterLeft,'y':align=='bottom'?y+dimensions[1]+10:y-dimensions[1]-10,'text':title,'valign':'center','halign':'center','tag':'title'});}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.drawing.yaxis.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Drawing=RGraph.Drawing||{};RGraph.Drawing.YAxis=function(conf)\n{if(typeof conf==='object'&&typeof conf.x==='number'&&typeof conf.id==='string'){var id=conf.id\nvar x=conf.x;var parseConfObjectForOptions=true;}else{var id=conf;var x=arguments[1];}\nthis.id=id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext(\"2d\");this.canvas.__object__=this;this.x=x;this.coords=[];this.coordsText=[];this.original_colors=[];this.maxLabelLength=0;this.firstDraw=true;this.type='drawing.yaxis';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.properties={'chart.gutter.top':25,'chart.gutter.bottom':30,'chart.min':0,'chart.max':null,'chart.colors':['black'],'chart.title':'','chart.title.color':null,'chart.numticks':5,'chart.numlabels':5,'chart.labels.specific':null,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.color':null,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.align':'left','hart.scale.formatter':null,'chart.scale.point':'.','chart.scale.decimals':0,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.invert':false,'chart.scale.zerostart':true,'chart.scale.visible':true,'chart.units.pre':'','chart.units.post':'','chart.linewidth':1,'chart.noendtick.top':false,'chart.noendtick.bottom':false,'chart.noyaxis':false,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.xaxispos':'bottom','chart.events.click':null,'chart.events.mousemove':null,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[DRAWING.YAXIS] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.coordsText=[];if(!prop['chart.text.color'])prop['chart.text.color']=prop['chart.colors'][0];if(!prop['chart.title.color'])prop['chart.title.color']=prop['chart.colors'][0];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.drawYAxis();RG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.x-(prop['chart.align']=='right'?0:this.getWidth())&&mouseX<=this.x+(prop['chart.align']=='right'?this.getWidth():0)&&mouseY>=this.gutterTop&&mouseY<=(ca.height-this.gutterBottom)){var x=this.x;var y=this.gutterTop;var w=15;;var h=ca.height-this.gutterTop-this.gutterBottom;return{0:this,1:x,2:y,3:w,4:h,5:0,'object':this,'x':x,'y':y,'width':w,'height':h,'index':0,'tooltip':prop['chart.tooltips']?prop['chart.tooltips'][0]:null};}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);}\nprop['chart.colors'][0]=this.parseSingleColorForGradient(prop['chart.colors'][0]);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,prop['chart.gutter.top'],0,ca.height-this.gutterBottom);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.drawYAxis=this.DrawYAxis=function()\n{for(i in prop){if(typeof i=='string'){var key=i.replace(/^chart\\./,'axis.');prop[key]=prop[i];}}\nvar x=this.x,y=this.gutterTop,height=ca.height-this.gutterBottom-this.gutterTop,min=+prop['chart.min']?+prop['chart.min']:0,max=+prop['chart.max'],title=prop['chart.title']?prop['chart.title']:'',color=prop['chart.colors']?prop['chart.colors'][0]:'black',title_color=prop['chart.title.color']?prop['chart.title.color']:color,label_color=prop['chart.text.color']?prop['chart.text.color']:color,numticks=typeof(prop['chart.numticks'])=='number'?prop['chart.numticks']:10,labels_specific=prop['chart.labels.specific'],numlabels=prop['chart.numlabels']?prop['chart.numlabels']:5,font=prop['chart.text.font']?prop['chart.text.font']:'Arial',size=prop['chart.text.size']?prop['chart.text.size']:10\nalign=typeof(prop['chart.align'])=='string'?prop['chart.align']:'left',formatter=prop['chart.scale.formatter'],decimals=prop['chart.scale.decimals'],invert=prop['chart.scale.invert'],scale_visible=prop['chart.scale.visible'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],linewidth=prop['chart.linewidth']?prop['chart.linewidth']:1,notopendtick=prop['chart.noendtick.top'],nobottomendtick=prop['chart.noendtick.bottom'],noyaxis=prop['chart.noyaxis'],xaxispos=prop['chart.xaxispos']\nco.lineWidth=linewidth+0.001;co.strokeStyle=color;if(!noyaxis){pa2(co,['b','m',Math.round(x),y,'l',Math.round(x),y+height,'s',color]);if(numticks){var gap=(xaxispos=='center'?height/2:height)/numticks;var halfheight=height/2;co.beginPath();for(var i=(notopendtick?1:0);i<=(numticks-(nobottomendtick||xaxispos=='center'?1:0));++i){pa2(co,['m',align=='right'?x+3:x-3,Math.round(y+(gap*i)),'l',x,Math.round(y+(gap*i))]);}\nif(xaxispos=='center'){for(var i=1;i<=numticks;++i){pa2(co,['m',align=='right'?x+3:x-3,Math.round(y+halfheight+(gap*i)),'l',x,Math.round(y+halfheight+(gap*i))]);}}\nco.stroke();}}\nco.fillStyle=label_color;var text_len=0;if(scale_visible){if(labels_specific&&labels_specific.length){var text_len=0;for(var i=0,len=labels_specific.length;i<len;i+=1){text_len=ma.max(text_len,co.measureText(labels_specific[i]).width);}\nfor(var i=0,len=labels_specific.length;i<len;++i){var gap=(len-1)>0?(height/(len-1)):0;if(xaxispos=='center'){gap/=2;}\nRG.text2(this,{'font':font,'size':size,'x':x-(align=='right'?-5:5),'y':(i*gap)+this.gutterTop,'text':labels_specific[i],'valign':'center','halign':align=='right'?'left':'right','tag':'scale'});this.maxLabelLength=ma.max(this.maxLabelLength,co.measureText(labels_specific[i]).width);}\nif(xaxispos=='center'){for(var i=(labels_specific.length-2);i>=0;--i){RG.text2(this,{'font':font,'size':size,'x':x-(align=='right'?-5:5),'y':ca.height-this.gutterBottom-(i*gap),'text':labels_specific[i],'valign':'center','halign':align=='right'?'left':'right','tag':'scale'});}}}else{for(var i=0;i<=numlabels;++i){var original=((max-min)*((numlabels-i)/numlabels))+min;if(original==0&&prop['chart.scale.zerostart']==false){continue;}\nvar text=RG.numberFormat(this,original.toFixed(original===0?0:decimals),units_pre,units_post);var text=String(typeof(formatter)=='function'?formatter(this,original):text);var text_len=ma.max(text_len,co.measureText(text).width);this.maxLabelLength=text_len;if(invert){var y=height-((height/numlabels)*i);}else{var y=(height/numlabels)*i;}\nif(prop['chart.xaxispos']=='center'){y=y/2;}\ntext=text.replace(/^-,([0-9])/,'-$1');RG.text2(this,{'font':font,'size':size,'x':x-(align=='right'?-5:5),'y':y+this.gutterTop,'text':text,'valign':'center','halign':align=='right'?'left':'right','tag':'scale'});if(prop['chart.xaxispos']=='center'&&i<numlabels){RG.Text2(this,{'font':font,'size':size,'x':x-(align=='right'?-5:5),'y':ca.height-this.gutterBottom-y,'text':'-'+text,'valign':'center','halign':align=='right'?'left':'right','tag':'scale'});}}}}\nif(title){co.beginPath();co.fillStyle=title_color;if(labels_specific){var width=0;for(var i=0,len=labels_specific.length;i<len;i+=1){width=Math.max(width,co.measureText(labels_specific[i]).width);}}else{var width=co.measureText(prop['chart.units.pre']+prop['chart.max'].toFixed(prop['chart.scale.decimals'])+prop['chart.units.post']).width;}\nRG.text2(this,{font:font,size:size+2,x:align=='right'?x+width+8:x-width-8,y:height/2+this.gutterTop,text:title,valign:'bottom',halign:'center',angle:align=='right'?90:-90,accessible:false});co.stroke();}};this.getWidth=function()\n{var width=this.maxLabelLength;if(prop['chart.title']&&prop['chart.title'].length){width+=(prop['chart.text.size']*1.5);}\nthis.width=width;return width;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.fuel.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Fuel=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),min=conf.min,max=conf.max,value=conf.value,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),min=arguments[1],max=arguments[2],value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='fuel';this.isRGraph=true;this.min=RGraph.stringsToNumbers(min);this.max=RGraph.stringsToNumbers(max);this.value=RGraph.stringsToNumbers(value);this.angles={};this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.coordsText=[];this.original_colors=[];this.firstDraw=true;if(!this.canvas){alert('[FUEL] No canvas support');return;}\nthis.properties={'chart.colors':['Gradient(white:red)'],'chart.needle.color':'red','chart.gutter.left':5,'chart.gutter.right':5,'chart.gutter.top':5,'chart.gutter.bottom':5,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.adjustable':false,'chart.resizable':false,'chart.resize.handle.background':null,'chart.icon':'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAfCAYAAAD0ma06AAAEGElEQVRIS7VXSyhtYRT+jnfe5FEMjAwUBiQGHikzRWIkkgy8YyDK+xnJK5JCeZSUGKBMiAyYkMxMJAMpSfJ+2/d8695/33NunSPnHqt2Z5+91/9/'+'/'+'/et9a/1b8Pn56dmMBhg/IWDgwNoNzc38PHxkXtN0+Tiexp9eH18fIDj1Bj63N/fw8vLS/wsmcHoqKmXT09PuL29RVFREU5OTvTJ6UIAgioQ+vLe09MTb29v8PX1RWBgICYnJ+XXIqDRWXN0dJT3nIDsWlpadP+lpSWZlD4KmL/8/'+'/7+Ls/S09N1/7y8PISHh+sK/QssDJWcHEyGCnB1dRUDAwPIzMzUx5GpAnZ1dcXy8jK2trbM5j06OsLc3JzISx8q4OzsLOOsAq6treHg4AAeHh4WJbq7u0Nzc7P+PiYmBnt7ezg9PcXExAQCAgLg5OSEx8dHuLu7Wwfc3t7G/v6+yEcjO8rIROGKaWdnZ+jr6zMDjI6OxvT0tDzr6uqS2KtksspwZ2cHjY2NuqSUhnHmilUCraysmElaWloKJpQCjI2NRX5+Pl5eXr6WlCv08/MTEMVOZDH+Zzw4CdlfX1/rDHt7ezE1NQXGkcYEKi4ulkVKYlpLGouBs/JiaGgIZL25uSlecXFxohAz/ccAz8/P4e/vj7q6Ojw8PMje5DNRy94MQ0JCUFtbK2wqKipE+sHBQbi4uPwMQ86ak5ODxMREVFdXIywsDCUlJRJDXnZlmJqaip6eHuTm5kqikGlycjIyMjL+ZrY9JSUgMzQiIgINDQ2ypaqqqkCZWXHsnjQEHB8fR0pKigAxabq7uyWOlJNxtLukTJDs7GxUVlZKDNl5oqKi8Pr6+jOAIyMjiI+Pl5JGQG4F1Qy+LN7f3fiUdGZmBsHBwRgbG8Pw8LD01ba2NmlX0rTtnTQLCwvSjEdHR3FxcSExLCwsRGRkpBR9vePzeMDyw3bT1NT0XXLiT4a7u7s4Pj4GGzd7K8GCgoKEsRR8I4Cm6hwHXV5eiv62GAE5npMTmFuBTCkzmzT7qs5Q9TlW/o6ODlvwhCHPM5SVPZIxYzNeXFxEa2srvL29YTC2GI3aMm3Zeq6urv4LMC0tDRsbG1K8k5KS9DgS0IwhKVFjSsJA22r9/f0oKCgQdvPz83JEmZ2dlcpD9maSshow0KZnlO8Csx9yK3BLKCMJPpf2xGMigdi9WXooaWdn53dxdP+amhrZh4eHh1hfX5cTW319vZyBnp+ffzNkBWBmhYaGysB/j322oCckJCArK0uGMlsJ5ubmBoPxRiMzFlomjr2MGdne3i5ANILRJEtJt6ysTG8h9gDl4am8vFwSUWron1O9LulXIOqk9pWftfdSS40yyj5Uh101wPRryuR7R1ZMX/U1pfy5IF40xcgUnGAc9wsGYxsFhy87kwAAAABJRU5ErkJggg==','chart.icon.redraw':true,'chart.background.image.stretch':false,'chart.background.image.x':null,'chart.background.image.y':null,'chart.labels.full':'F','chart.labels.empty':'E','chart.labels.count':5,'chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.scale.visible':false,'chart.scale.decimals':0,'chart.units.pre':'','chart.units.post':'','chart.clearto':'rgba(0,0,0,0)'}\nif(this.value>this.max)this.value=this.max;if(this.value<this.min)this.value=this.min;if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=ca.height-20-this.gutterBottom\nthis.radius=ca.height-this.gutterTop-this.gutterBottom-20;this.coordsText=[];if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.angles.start=(RG.PI+RG.HALFPI)-0.5;this.angles.end=(RG.PI+RG.HALFPI)+0.5;this.angles.needle=this.getAngle(this.value);this.DrawLabels();this.DrawChart();if(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawChart=this.DrawChart=function()\n{this.DrawScale();if(!RG.ISOLD){this.DrawIcon();}\nthis.DrawNeedle();};this.drawLabels=this.DrawLabels=function()\n{if(!prop['chart.scale.visible']){var radius=(this.radius-20);co.fillStyle=prop['chart.text.color'];var y=this.centery-Math.sin(this.angles.start-RG.PI)*(this.radius-25);var x=this.centerx-Math.cos(this.angles.start-RG.PI)*(this.radius-25);RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':x,'y':y,'text':prop['chart.labels.empty'],'halign':'center','valign':'center','tag':'labels'});var y=this.centery-Math.sin(this.angles.start-RG.PI)*(this.radius-25);var x=this.centerx+Math.cos(this.angles.start-RG.PI)*(this.radius-25);RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':x,'y':y,'text':prop['chart.labels.full'],'halign':'center','valign':'center','tag':'labels'});}};this.drawNeedle=this.DrawNeedle=function()\n{co.beginPath();co.lineWidth=5;co.lineCap='round';co.strokeStyle=prop['chart.needle.color'];var angle=this.angles.needle;co.arc(this.centerx,this.centery,this.radius-30,angle,angle+0.0001,false);co.lineTo(this.centerx,this.centery);co.stroke();co.lineWidth=1;var cx=this.centerx+10;var cy=this.centery-10\nvar grad=co.createRadialGradient(cx,cy,35,cx,cy,0);grad.addColorStop(0,'black');grad.addColorStop(1,'#eee');if(navigator.userAgent.indexOf('Firefox/6.0')>0){grad=co.createLinearGradient(cx+10,cy-10,cx-10,cy+10);grad.addColorStop(1,'#666');grad.addColorStop(0.5,'#ccc');}\nco.beginPath();co.fillStyle=grad;co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,20,0,RG.TWOPI,0);co.fill();};this.drawScale=this.DrawScale=function()\n{var a,x,y;co.beginPath();co.strokeStyle='black';co.fillStyle='white';co.arc(this.centerx,this.centery,this.radius,this.angles.start,this.angles.end,false);co.arc(this.centerx,this.centery,this.radius-10,this.angles.end,this.angles.start,true);co.closePath();co.stroke();co.fill();var start=this.angles.start;var end=this.angles.needle;co.beginPath();co.fillStyle=prop['chart.colors'][0];co.arc(this.centerx,this.centery,this.radius,start,end,false);co.arc(this.centerx,this.centery,this.radius-10,end,start,true);co.closePath();co.fill();for(a=this.angles.start;a<=this.angles.end+0.01;a+=((this.angles.end-this.angles.start)/5)){co.beginPath();co.arc(this.centerx,this.centery,this.radius-10,a,a+0.0001,false);co.arc(this.centerx,this.centery,this.radius-15,a+0.0001,a,true);co.stroke();}\nif(prop['chart.scale.visible']){co.fillStyle=prop['chart.text.color'];var numLabels=prop['chart.labels.count'];var decimals=prop['chart.scale.decimals'];var font=prop['chart.text.font'];var size=prop['chart.text.size'];var units_post=prop['chart.units.post'];var units_pre=prop['chart.units.pre'];for(var i=0;i<=numLabels;++i){a=((this.angles.end-this.angles.start)*(i/numLabels))+this.angles.start;y=this.centery-Math.sin(a-RG.PI)*(this.radius-25);x=this.centerx-Math.cos(a-RG.PI)*(this.radius-25);RG.Text2(this,{'font':font,'size':size,'x':x,'y':y,'text':RG.number_format(this,(this.min+((this.max-this.min)*(i/numLabels))).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','tag':'scale'});}}};this.getShape=function(e){};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e);var angle=RG.getAngleByXY(this.centerx,this.centery,mouseXY[0],mouseXY[1]);if(angle>=this.angles.end){return this.max;}else if(angle<=this.angles.start){return this.min;}\nvar value=(angle-this.angles.start)/(this.angles.end-this.angles.start);value=value*(this.max-this.min);value=value+this.min;return value;};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);var angle=RG.getAngleByXY(this.centerx,this.centery,mouseXY[0],mouseXY[1]);var accuracy=15;var leftMin=this.centerx-this.radius;var rightMax=this.centerx+this.radius;var topMin=this.centery-this.radius;var bottomMax=this.centery+this.radius;if(mouseXY[0]>leftMin&&mouseXY[0]<rightMax&&mouseXY[1]>topMin&&mouseXY[1]<bottomMax){return this;}};this.drawIcon=this.DrawIcon=function()\n{if(!RG.ISOLD){if(!this.__icon__||!this.__icon__.__loaded__){var img=new Image();img.src=prop['chart.icon'];img.__object__=this;this.__icon__=img;img.onload=function(e)\n{img.__loaded__=true;var obj=img.__object__;co.drawImage(img,obj.centerx-(img.width/2),obj.centery-obj.radius+35);obj.DrawNeedle();if(prop['chart.icon.redraw']){obj.Set('chart.icon.redraw',false);RG.Clear(obj.canvas);RG.RedrawCanvas(ca);}}}else{var img=this.__icon__;co.drawImage(img,this.centerx-(img.width/2),this.centery-this.radius+35);}}\nthis.DrawNeedle();};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){this.value=this.getValue(e);RG.redrawCanvas(ca);RG.fireCustomEvent(this,'onadjust');}};this.getAngle=function(value)\n{if(value<this.min||value>this.max){return null;}\nvar angle=(((value-this.min)/(this.max-this.min))*(this.angles.end-this.angles.start))+this.angles.start;return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.needle.color']=RG.array_clone(prop['chart.needle.color']);}\nvar props=this.properties;var colors=props['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForLinearGradient(colors[i]);}\nprops['chart.needle.color']=this.parseSingleColorForRadialGradient(props['chart.needle.color']);};this.reset=function()\n{};this.parseSingleColorForLinearGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.parseSingleColorForRadialGradient=function(color)\n{if(!color||typeof color!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var callback=arguments[1]||function(){};var opt=arguments[0]||{};var numFrames=opt.frames||30;var frame=0;var obj=this;var origValue=Number(this.currentValue);if(this.currentValue==null){this.currentValue=this.min;origValue=this.min;}\nvar newValue=this.value;var diff=newValue-origValue;var step=(diff/numFrames);var frame=0;function iterator()\n{frame++;obj.value=((frame/numFrames)*diff)+origValue\nif(obj.value>obj.max)obj.value=obj.max;if(obj.value<obj.min)obj.value=obj.min;RGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);if(frame<numFrames){RGraph.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.funnel.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Funnel=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var data=conf.data;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var data=arguments[1];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='funnel';this.coords=[];this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.coordsText=[];this.original_colors=[];this.firstDraw=true;if(!this.canvas){alert('[FUNNEL] No canvas support');return;}\nthis.properties={'chart.strokestyle':'rgba(0,0,0,0)','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.labels':null,'chart.labels.sticks':false,'chart.labels.x':null,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.colors':['Gradient(white:red)','Gradient(white:green)','Gradient(white:gray)','Gradient(white:blue)','Gradient(white:black)','Gradient(white:gray)','Gradient(white:pink)','Gradient(white:blue)','Gradient(white:yellow)','Gradient(white:green)','Gradient(white:red)'],'chart.text.size':12,'chart.text.boxed':true,'chart.text.halign':'left','chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.shadow':false,'chart.shadow.color':'#666','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.tooltips.highlight':true,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.clearto':'rgba(0,0,0,0)'}\nfor(var i=0;i<data.length;++i){data[i]=parseFloat(data[i]);}\nthis.data=data;for(var i=0;i<data.length;++i){this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.coords=[];this.coordsText=[];RG.DrawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);this.DrawFunnel();if(prop['chart.contextmenu']){RG.ShowContext(this);}\nthis.DrawLabels();if(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawFunnel=this.DrawFunnel=function()\n{var width=ca.width-this.gutterLeft-this.gutterRight;var height=ca.height-this.gutterTop-this.gutterBottom;var total=RG.array_max(this.data);var accheight=this.gutterTop;if(prop['chart.shadow']){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}\nfor(i=0,len=this.data.length;i<len;++i){var firstvalue=this.data[0];var firstwidth=(firstvalue/total)*width;var curvalue=this.data[i];var curwidth=(curvalue/total)*width;var curheight=height/this.data.length;var halfCurWidth=(curwidth/2);var nextvalue=this.data[i+1];var nextwidth=this.data[i+1]?(nextvalue/total)*width:null;var halfNextWidth=(nextwidth/2);var center=this.gutterLeft+(firstwidth/2);var x1=center-halfCurWidth;var y1=accheight;var x2=center+halfCurWidth;var y2=accheight;var x3=center+halfNextWidth;var y3=accheight+curheight;var x4=center-halfNextWidth;var y4=accheight+curheight;if(nextwidth&&i<this.data.length-1){co.beginPath();co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][i];co.moveTo(x1,y1);co.lineTo(x2,y2);co.lineTo(x3,y3);co.lineTo(x4,y4);co.closePath();this.coords.push([x1,y1,x2,y2,x3,y3,x4,y4]);}\nif(!prop['chart.shadow']){co.stroke();}\nco.fill();accheight+=curheight;}\nif(prop['chart.shadow']){RG.NoShadow(this);for(i=0;i<this.coords.length;++i){co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][i];co.beginPath();co.moveTo(this.coords[i][0],this.coords[i][1]);co.lineTo(this.coords[i][2],this.coords[i][3]);co.lineTo(this.coords[i][4],this.coords[i][5]);co.lineTo(this.coords[i][6],this.coords[i][7]);co.closePath();co.stroke();co.fill();}}\nif(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}};this.drawLabels=this.DrawLabels=function()\n{if(prop['chart.labels']&&prop['chart.labels'].length>0){var font=prop['chart.text.font'];var size=prop['chart.text.size'];var color=prop['chart.text.color'];var labels=prop['chart.labels'];var halign=prop['chart.text.halign']=='left'?'left':'center';var bgcolor=prop['chart.text.boxed']?'white':null;if(typeof prop['chart.labels.x']=='number'){var x=prop['chart.labels.x'];}else{var x=halign=='left'?(this.gutterLeft-15):((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;}\nfor(var j=0;j<this.coords.length;++j){co.beginPath();co.strokeStyle='black';co.fillStyle=color;RG.NoShadow(this);var label=labels[j];RG.text2(this,{'font':font,'size':size,'x':x,'y':this.coords[j][1],'text':label,'valign':'center','halign':halign,'bounding':prop['chart.text.boxed'],'boundingFill':bgcolor,'tag':'labels'});if(prop['chart.labels.sticks']){co.font=size+'pt '+font;var labelWidth=co.measureText(label).width;co.beginPath();co.strokeStyle='gray';co.moveTo(x+labelWidth+10,ma.round(this.coords[j][1]));co.lineTo(this.coords[j][0]-10,ma.round(this.coords[j][1]));co.stroke();}}\nvar lastLabel=labels[j];if(lastLabel){RG.text2(this,{'font':font,'size':size,'x':x,'y':this.coords[j-1][5],'text':lastLabel,'valign':'center','halign':halign,'bounding':prop['chart.text.boxed'],'boundingFill':bgcolor,'tag':'labels'});if(prop['chart.labels.sticks']){co.font=size+'pt '+font;var labelWidth=co.measureText(lastLabel).width;co.beginPath();co.strokeStyle='gray';co.moveTo(x+labelWidth+10,Math.round(this.coords[j-1][7]));co.lineTo(this.coords[j-1][6]-10,Math.round(this.coords[j-1][7]));co.stroke();}}}};this.getShape=this.getSegment=function(e)\n{var coords=this.coords;var mouseCoords=RG.getMouseXY(e);var x=mouseCoords[0];var y=mouseCoords[1];for(i=0,len=coords.length;i<len;++i){var segment=coords[i]\nco.beginPath();co.moveTo(segment[0],segment[1]);co.lineTo(segment[2],segment[3]);co.lineTo(segment[4],segment[5]);co.lineTo(segment[6],segment[7]);co.lineTo(segment[8],segment[9]);if(co.isPointInPath(x,y)){var tooltip=RGraph.parseTooltipText(prop['chart.tooltips'],i);return{0:this,1:coords,2:i,'object':this,'coords':segment,'index':i,'tooltip':tooltip};}}\nreturn null;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);return;}\nvar coords=shape['coords'];pa2(co,'b m % % l % % l % % l % % c s % f %',coords[0],coords[1],coords[2],coords[3],coords[4],coords[5],coords[6],coords[7],prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)\n{var mouseXY=RGraph.getMouseXY(e);if(mouseXY[0]>prop['chart.gutter.left']&&mouseXY[0]<(ca.width-prop['chart.gutter.right'])&&mouseXY[1]>prop['chart.gutter.top']&&mouseXY[1]<(ca.height-prop['chart.gutter.bottom'])){return this;}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.key.colors']=RG.array_clone(prop['chart.key.colors']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);}\nvar colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForHorizontalGradient(colors[i]);}\nvar keyColors=prop['chart.key.colors'];if(keyColors){for(var i=0;i<keyColors.length;++i){keyColors[i]=this.parseSingleColorForHorizontalGradient(keyColors[i]);}}\nprop['chart.strokestyle']=this.parseSingleColorForVerticalGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForHorizontalGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForHorizontalGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForHorizontalGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RGraph.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.parseSingleColorForVerticalGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){var parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,prop['chart.gutter.top'],0,ca.height-prop['chart.gutter.bottom']);var diff=1/(parts.length-1);grad.addColorStop(0,RGraph.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{var coords=this.coords[index];if(coords&&coords.length==8){var pre_linewidth=co.lineWidth;co.lineWidth=2;co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.beginPath();co.moveTo(coords[0],coords[1]);co.lineTo(coords[2],coords[3]);co.lineTo(coords[4],coords[5]);co.lineTo(coords[6],coords[7]);co.closePath();co.fill();co.stroke();co.lineWidth=pre_linewidth;}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.gantt.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Gantt=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var data=conf.data;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var data=arguments[1];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='gantt';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.data=data;this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.width':1,'chart.background.grid.color':'#ddd','chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.grid.hlines':true,'chart.background.grid.vlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':7,'chart.background.grid.autofit.numvlines':null,'chart.vbars':[],'chart.hbars':[],'chart.text.size':12,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.color':'black','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.gutter.left':75,'chart.gutter.right':25,'chart.gutter.top':35,'chart.gutter.bottom':25,'chart.labels':[],'chart.labels.color':null,'chart.labels.align':'bottom','chart.labels.inbar':null,'chart.labels.inbar.color':'black','chart.labels.inbar.bgcolor':null,'chart.labels.inbar.align':'left','chart.labels.inbar.size':10,'chart.labels.inbar.font':'Segoe UI, Arial, Verdana, sans-serif','chart.labels.inbar.above':false,'chart.labels.percent':true,'chart.vmargin':2,'chart.title':'','chart.title.background':null,'chart.title.x':null,'chart.title.y':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.pos':null,'chart.title.yaxis.color':null,'chart.title.yaxis.position':'right','chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.xaxis.bold':true,'chart.title.xaxis.color':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.borders':true,'chart.defaultcolor':'white','chart.coords':[],'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.xmin':0,'chart.xmax':0,'chart.contextmenu':null,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.adjustable':false,'chart.adjustable.only':null,'chart.events.click':null,'chart.events.mousemove':null,'chart.clearto':'rgba(0,0,0,0)'}\nif(!data){alert('[GANTT] The Gantt chart event data is now supplied as the second argument to the constructor - please update your code');}else{for(var i=0,idx=0;i<data.length;++i){if(typeof data[i].start==='string')data[i].start=parseFloat(data[i].start);if(typeof data[i].duration==='string')data[i].duration=parseFloat(data[i].duration);if(typeof data[i].complete==='string')data[i].complete=parseFloat(data[i].complete);if(typeof data[i].linewidth==='string')data[i].linewidth=parseFloat(data[i].linewidth);}}\nfor(var i=0,idx=0;i<data.length;++i){if(RGraph.isArray(this.data[i][0])){for(var j=0;j<this.data[i].length;++j){this['$'+(idx++)]={};}}else{this['$'+(idx++)]={};}}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.margin'){name='chart.vmargin'}\nif(name=='chart.events'){alert('[GANTT] The chart.events property is deprecated - supply the events data as an argument to the constructor instead');this.data=value;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.margin'){name='chart.vmargin'}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.coordsText=[];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.graphArea=ca.width-this.gutterLeft-this.gutterRight;this.graphHeight=ca.height-this.gutterTop-this.gutterBottom;this.numEvents=this.data.length\nthis.barHeight=this.graphHeight/this.numEvents;this.halfBarHeight=this.barHeight/2;RG.background.Draw(this);this.drawLabels();this.DrawEvents();if(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawLabels=this.DrawLabels=function()\n{var labels=prop['chart.labels'],labelsColor=prop['chart.labels.color']||prop['chart.text.color'],labelSpace=(this.graphArea)/labels.length,x=this.gutterLeft+(labelSpace/2),y=this.gutterTop-(prop['chart.text.size']/2)-5,font=prop['chart.text.font'],size=prop['chart.text.size'];co.beginPath();co.fillStyle=prop['chart.text.color'];co.strokeStyle='black'\nif(prop['chart.labels.align']=='bottom'){y=ca.height-this.gutterBottom+size+2;}\nfor(i=0;i<labels.length;++i){RG.text2(this,{font:font,size:size,x:x+(i*labelSpace),y:y,text:String(labels[i]),halign:'center',valign:'center',tag:'labels.horizontal'});}\nfor(var i=0,len=this.data.length;i<len;++i){var ev=this.data[i],x=this.gutterLeft,y=this.gutterTop+this.halfBarHeight+(i*this.barHeight);co.fillStyle=labelsColor||prop['chart.text.color'];var label=RG.isArray(ev)?String(ev[0].label):String(ev.label);if(label){RG.text2(this,{font:font,size:size,x:x-5,y:y,text:label,halign:'right',valign:'center',tag:'labels.vertical'});}}};this.drawEvents=this.DrawEvents=function()\n{var events=this.data;this.coords=[];if(prop['chart.vbars']){for(i=0,len=prop['chart.vbars'].length;i<len;++i){if(prop['chart.vbars'][i][0]+prop['chart.vbars'][i][1]>prop['chart.xmax']){prop['chart.vbars'][i][1]=364-prop['chart.vbars'][i][0];}\nvar barX=this.gutterLeft+(((prop['chart.vbars'][i][0]-prop['chart.xmin'])/(prop['chart.xmax']-prop['chart.xmin']))*this.graphArea),barY=this.gutterTop,width=(this.graphArea/(prop['chart.xmax']-prop['chart.xmin']))*prop['chart.vbars'][i][1],height=ca.height-this.gutterTop-this.gutterBottom;if((barX+width)>(ca.width-this.gutterRight)){width=ca.width-this.gutterRight-barX;}\nco.fillStyle=prop['chart.vbars'][i][2];co.fillRect(barX,barY,width,height);}}\nif(prop['chart.hbars']){for(i=0,len=prop['chart.hbars'].length;i<len;++i){if(prop['chart.hbars'][i]){var barX=this.gutterLeft,barY=((ca.height-this.gutterTop-this.gutterBottom)/this.data.length)*i+this.gutterTop,width=this.graphArea,height=this.barHeight\nco.fillStyle=prop['chart.hbars'][i];co.fillRect(barX,barY,width,height);}}}\nvar sequentialIndex=0;for(i=0;i<events.length;++i){if(typeof events[i].start==='number'){this.DrawSingleEvent(events[i],i,sequentialIndex++);}else{for(var j=0;j<events[i].length;++j){var subindex=j;this.DrawSingleEvent(events[i][j],i,sequentialIndex++,subindex);}}}};this.getShape=this.getBar=function(e)\n{e=RG.fixEventObject(e);var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];for(var i=0,len=this.coords.length;i<len;i++){var left=this.coords[i][0],top=this.coords[i][1],width=this.coords[i][2],height=this.coords[i][3];if(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=(top+height)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);var ret={0:this,object:this,1:left,x:left,2:top,y:top,3:width,width:width,4:height,height:height,5:i,index:this.coords[i][4].index,subindex:(this.coords[i][4]&&typeof this.coords[i][4].subindex==='number'?this.coords[i][4].subindex:null),sequentialIndex:this.coords[i][5],tooltip:tooltip};return ret;}}};this.drawSingleEvent=this.DrawSingleEvent=function(ev,index,sequentialIndex)\n{ev.index=index;if(typeof arguments[3]==='number'){ev.subindex=arguments[3]}\nvar min=prop['chart.xmin'];co.beginPath();co.strokeStyle='black';co.fillStyle=ev.color?ev.color:prop['chart.defaultcolor'];var barStartX=this.gutterLeft+(((ev.start-min)/(prop['chart.xmax']-min))*this.graphArea),barStartY=this.gutterTop+(index*this.barHeight),barWidth=(ev.duration/(prop['chart.xmax']-min))*this.graphArea;if((barStartX+barWidth)>(ca.width-this.gutterRight)){barWidth=ca.width-this.gutterRight-barStartX;}\nthis.coords.push([barStartX,barStartY+prop['chart.vmargin'],barWidth,this.barHeight-(2*prop['chart.vmargin']),ev,sequentialIndex,]);if(prop['chart.borders']||typeof ev.border==='number'){co.strokeStyle=typeof(ev.border)==='string'?ev.border:'black';co.lineWidth=(typeof(ev.linewidth)==='number'?ev.linewidth:1);if(ev.linewidth!==0){co.strokeRect(barStartX,barStartY+prop['chart.vmargin'],barWidth,this.barHeight-(2*prop['chart.vmargin']));}}\nif(RG.isNull(ev.complete)){co.fillStyle=ev.color?ev.color:prop['chart.defaultcolor'];}else{co.fillStyle=ev.background?ev.background:prop['chart.defaultcolor'];}\nco.fillRect(barStartX,barStartY+prop['chart.vmargin'],barWidth,this.barHeight-(2*prop['chart.vmargin']));var complete=(ev.complete/100)*barWidth;if(typeof(ev.complete)==='number'){co.fillStyle=ev.color?ev.color:'#0c0';co.fillRect(barStartX,barStartY+prop['chart.vmargin'],(ev.complete/100)*barWidth,this.barHeight-(2*prop['chart.vmargin']));if(prop['chart.labels.percent']){co.beginPath();co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size'],x:barStartX+barWidth+5,y:barStartY+this.halfBarHeight,text:String(ev.complete)+'%',valign:'center',tag:'labels.complete'});}}\nif(prop['chart.labels.inbar']&&prop['chart.labels.inbar'][sequentialIndex]){var label=String(prop['chart.labels.inbar'][sequentialIndex]),halign=prop['chart.labels.inbar.align']=='left'?'left':'center';halign=prop['chart.labels.inbar.align']=='right'?'right':halign;if(halign=='right'){var x=(barStartX+barWidth)-5;}else if(halign=='center'){var x=barStartX+(barWidth/2);}else{var x=barStartX+5;}\nif(prop['chart.labels.inbar.above']){x=barStartX+barWidth+5;halign='left';}\nco.fillStyle=prop['chart.labels.inbar.color'];RG.text2(this,{font:prop['chart.labels.inbar.font'],size:prop['chart.labels.inbar.size'],x:x,y:barStartY+this.halfBarHeight,text:label,valign:'center',halign:halign,bounding:typeof(prop['chart.labels.inbar.bgcolor'])=='string',boundingFill:typeof(prop['chart.labels.inbar.bgcolor'])=='string'?prop['chart.labels.inbar.bgcolor']:null,tag:'labels.inbar'});}};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>this.gutterTop&&mouseXY[1]<(ca.height-this.gutterBottom)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var bar=RG.Registry.get('chart.adjusting.gantt');if(bar){var mouseXY=RG.getMouseXY(e),obj=RG.Registry.get('chart.adjusting.gantt')['object'],index=bar['index'],subindex=bar['subindex'],diff=((mouseXY[0]-RG.Registry.get('chart.adjusting.gantt')['mousex'])/(ca.width-obj.gutterLeft-obj.gutterRight))*prop['chart.xmax'],eventStart=RG.Registry.get('chart.adjusting.gantt')['event_start'],duration=RG.Registry.get('chart.adjusting.gantt')['event_duration'],event=typeof subindex==='number'?obj.data[index][subindex]:obj.data[index]\nif(bar['mode']==='move'){diff=ma.round(diff);if(RG.isNull(subindex)){event.start=eventStart+diff;if(eventStart+diff<0){obj.data[index].start=0;}else if((eventStart+diff+obj.data[index].duration)>prop['chart.xmax']){obj.data[index].start=prop['chart.xmax']-obj.data[index].duration;}}else{var index=RG.Registry.get('chart.adjusting.gantt').index,subindex=RG.Registry.get('chart.adjusting.gantt').subindex,event=this.data[index][subindex];event.start=eventStart+diff;if((eventStart+diff)<0){event.start=0;}else if((eventStart+diff+event.duration)>prop['chart.xmax']){event.start=prop['chart.xmax']-event.duration;}}}else if(bar['mode']=='resize'){if(mouseXY[0]>(ca.width-obj.gutterRight)){mouseXY[0]=ca.width-obj.gutterRight;}\nvar diff=((mouseXY[0]-RG.Registry.get('chart.adjusting.gantt')['mousex'])/(ca.width-obj.gutterLeft-obj.gutterRight))*prop['chart.xmax'];diff=ma.round(diff);if(RG.isNull(subindex)){obj.data[index].duration=duration+diff;if(obj.data[index].duration<0){obj.data[index].duration=1;}}else{obj.data[index][subindex].duration=duration+diff;if(obj.data[index][subindex].duration<0){obj.data[index][subindex].duration=1;}}}\nRG.resetColorsToOriginalValues(this);RG.redrawCanvas(ca);RG.fireCustomEvent(obj,'onadjust');}}};this.getXCoord=function(value)\n{var min=prop['chart.xmin'],max=prop['chart.xmax'],graphArea=ca.width-this.gutterLeft-this.gutterRight;if(value>max||value<min){return null;}\nvar x=(((value-min)/(max-min))*graphArea)+this.gutterLeft;return x;};this.getValue=function(arg)\n{if(arg.length==2){var mouseXY=arg;}else{var mouseXY=RGraph.getMouseXY(arg);}\nvar mouseX=mouseXY[0],mouseY=mouseXY[1];var value=(mouseX-this.gutterLeft)/(ca.width-this.gutterLeft-this.gutterRight);value*=(prop['chart.xmax']-prop['chart.xmin']);if(value<prop['chart.xmin']||value>prop['chart.xmax']){value=null;}\nreturn value;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['data']=RG.arrayClone(this.data);this.original_colors['chart.background.barcolor1']=RG.arrayClone(prop['chart.background.barcolor1']);this.original_colors['chart.background.barcolor2']=RG.arrayClone(prop['chart.background.barcolor2']);this.original_colors['chart.background.grid.color']=RG.arrayClone(prop['chart.background.grid.color']);this.original_colors['chart.defaultcolor']=RG.arrayClone(prop['chart.defaultcolor']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);}\nfor(var i=0,sequentialIndex=0;i<this.data.length;++i){if(RG.isArray(this.data[i])&&typeof this.data[i][0]==='object'&&typeof this.data[i][0].start==='number'){for(var j=0,len=this.data[i].length;j<len;j+=1,sequentialIndex+=1){this.data[i][j].background=this.parseSingleColorForGradient(this.data[i][j].background,{start:this.data[i][j].start,duration:this.data[i][j].duration});this.data[i][j].color=this.parseSingleColorForGradient(this.data[i][j].color,{start:this.data[i][j].start,duration:this.data[i][j].duration});}}else{if(typeof this.data[i].background==='string'){this.data[i].background=this.parseSingleColorForGradient(this.data[i].background,{start:this.data[i].start,duration:this.data[i].duration});}\nif(typeof this.data[i].color==='string'){this.data[i].color=this.parseSingleColorForGradient(this.data[i].color,{start:this.data[i].start,duration:this.data[i].duration});}\n++sequentialIndex;}}\nprop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.defaultcolor']=this.parseSingleColorForGradient(prop['chart.defaultcolor']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{var opts=arguments[1]||{};if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':'),value=(opts.start+opts.duration)>prop['chart.xmax']?prop['chart.xmax']:(opts.start+opts.duration);var grad=co.createLinearGradient(typeof opts.start==='number'?this.getXCoord(opts.start):this.gutterLeft,0,typeof opts.start==='number'?this.getXCoord(value):ca.width-this.gutterRight,0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this,opt=arguments[0]||{},callback=arguments[1]?arguments[1]:function(){},canvas=obj.canvas,context=obj.context,numFrames=opt.frames||30,frame=0;original_events=RG.arrayClone(obj.data);function iterator()\n{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame<=numFrames){for(var i=0,len=obj.data.length;i<len;++i){if(typeof obj.data[i]==='object'&&obj.data[i][0]&&typeof obj.data[i][0]==='object'){for(var j=0;j<obj.data[i].length;++j){obj.data[i][j].duration=(frame/numFrames)*original_events[i][j].duration;}}else{obj.data[i].duration=(frame/numFrames)*original_events[i].duration;}}\nobj.reset();frame++;RGraph.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.resetColorsToOriginalValues=function()\n{for(var i=0;i<this.original_colors['data'].length;++i){if(this.original_colors['data'][i].background){this.data[i].background=RG.arrayClone(this.original_colors['data'][i].background);}\nif(this.original_colors['data'][i].color){this.data[i].color=RG.arrayClone(this.original_colors['data'][i].color);}\nif(typeof this.original_colors['data'][i][0]==='object'&&typeof this.original_colors['data'][i][0].start==='number'){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j].background=RG.arrayClone(this.original_colors['data'][i][j].background);this.data[i][j].color=RG.arrayClone(this.original_colors['data'][i][j].color);}}}};this.reset=function()\n{this.resetColorsToOriginalValues();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.coords=[];};this.sequentialIndex2Grouped=function(){alert('[RGRAPH] Something went badly wrong - contact support');};this.isAdjustable=function(shape)\n{if(RG.isNull(prop['chart.adjustable.only'])){return true;}else if(RG.isArray(prop['chart.adjustable.only'])&&prop['chart.adjustable.only'][shape.sequentialIndex]){return true;}\nreturn false;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.gauge.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Gauge=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),min=conf.min,max=conf.max,value=conf.value,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),min=arguments[1],max=arguments[2],value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='gauge';this.min=RGraph.stringsToNumbers(min);this.max=RGraph.stringsToNumbers(max);this.value=RGraph.stringsToNumbers(value);this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.valueOriginal=this.value;if(typeof(this.value)=='object'){for(var i=0;i<this.value.length;++i){if(this.value[i]>this.max)this.value[i]=max;if(this.value[i]<this.min)this.value[i]=min;}}else{if(this.value>this.max)this.value=max;if(this.value<this.min)this.value=min;}\nthis.properties={'chart.angles.start':null,'chart.angles.end':null,'chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.gutter.left':15,'chart.gutter.right':15,'chart.gutter.top':15,'chart.gutter.bottom':15,'chart.border.width':10,'chart.title.top':'','chart.title.top.font':'Arial, Verdana, sans-serif','chart.title.top.size':14,'chart.title.top.color':'#333','chart.title.top.bold':false,'chart.title.top.italic':false,'chart.title.top.pos':null,'chart.title.bottom':'','chart.title.bottom.font':'Segoe UI, Arial, Verdana, sans-serif','chart.title.bottom.size':14,'chart.title.bottom.color':'#333','chart.title.bottom.bold':false,'chart.title.bottom.italic':false,'chart.title.bottom.pos':null,'chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.color':'#666','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.background.color':'white','chart.background.gradient':false,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.units.pre':'','chart.units.post':'','chart.value.text':false,'chart.value.text.y.pos':0.5,'chart.value.text.units.pre':null,'chart.value.text.units.post':null,'chart.value.text.bounding':true,'chart.value.text.bounding.fill':'white','chart.value.text.bounding.stroke':'black','chart.value.text.font':null,'chart.value.text.size':null,'chart.value.text.italic':null,'chart.value.text.bold':null,'chart.value.text.decimals':null,'chart.value.text.color':null,'chart.red.start':0.9*this.max,'chart.red.color':'#DC3912','chart.red.width':10,'chart.yellow.color':'#FF9900','chart.yellow.width':10,'chart.green.end':0.7*this.max,'chart.green.color':'rgba(0,0,0,0)','chart.green.width':10,'chart.colors.ranges':null,'chart.needle.size':null,'chart.needle.tail':false,'chart.needle.colors':['#D5604D','red','green','yellow'],'chart.needle.type':'triangle','chart.needle.width':7,'chart.border.outer':'#ccc','chart.border.inner':'#f1f1f1','chart.border.outline':'black','chart.centerpin.color':'blue','chart.centerpin.radius':null,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.tickmarks.small':25,'chart.tickmarks.small.color':'black','chart.tickmarks.medium':0,'chart.tickmarks.medium.color':'black','chart.tickmarks.big':5,'chart.tickmarks.big.color':'black','chart.labels.count':5,'chart.labels.centered':false,'chart.labels.offset.radius':0,'chart.labels.offset.angle':0,'chart.labels.specific':null,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.border.gradient':false,'chart.adjustable':false,'chart.shadow':true,'chart.shadow.color':'gray','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.title')name='chart.title.top';if(name=='chart.title.font')name='chart.title.top.font';if(name=='chart.title.size')name='chart.title.top.size';if(name=='chart.title.color')name='chart.title.top.color';if(name=='chart.title.bold')name='chart.title.top.bold';if(name=='chart.needle.color'){name='chart.needle.colors';}\nif(name=='chart.labels.offset'){name='chart.labels.offset.radius';}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.needle.color'){name='chart.needle.colors';}\nif(name=='chart.labels.offset'){name='chart.labels.offset.radius';}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.radius=Math.min(((ca.width-this.gutterLeft-this.gutterRight)/2),((ca.height-this.gutterTop-this.gutterBottom)/2));this.startAngle=prop['chart.angles.start']?prop['chart.angles.start']:(RG.HALFPI/3)+RG.HALFPI;this.endAngle=prop['chart.angles.end']?prop['chart.angles.end']:RG.TWOPI+RG.HALFPI-(RG.HALFPI/3);this.coordsText=[];if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.centerpinRadius=0.16*this.radius;if(typeof(prop['chart.centerpin.radius'])=='number'){this.centerpinRadius=prop['chart.centerpin.radius'];}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nthis.DrawBackGround();this.DrawGradient();this.DrawColorBands();this.DrawSmallTickmarks();this.DrawMediumTickmarks();this.DrawBigTickmarks();this.DrawLabels();this.DrawTopTitle();this.DrawBottomTitle();if(typeof(this.value)=='object'){for(var i=0;i<this.value.length;++i){this.DrawNeedle(this.value[i],prop['chart.needle.colors'][i],i);}}else{this.DrawNeedle(this.value,prop['chart.needle.colors'][0],0);}\nthis.DrawCenterpin();if(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawBackGround=this.DrawBackGround=function()\n{if(prop['chart.shadow']){RG.SetShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.beginPath();co.fillStyle=prop['chart.background.color'];co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,0);co.fill();RG.NoShadow(this);var grad=co.createRadialGradient(this.centerx+50,this.centery-50,0,this.centerx+50,this.centery-50,150);grad.addColorStop(0,'#eee');grad.addColorStop(1,'white');var borderWidth=prop['chart.border.width'];co.beginPath();co.fillStyle=prop['chart.background.color'];co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,0);co.fill();co.beginPath();co.fillStyle=prop['chart.border.outer'];co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,0);co.fill();co.beginPath();co.fillStyle=prop['chart.border.inner'];co.arc(this.centerx,this.centery,this.radius-borderWidth,0,RG.TWOPI,0);co.fill();co.beginPath();co.fillStyle=prop['chart.background.color'];co.arc(this.centerx,this.centery,this.radius-borderWidth-4,0,RG.TWOPI,0);co.fill();co.beginPath();co.fillStyle=prop['chart.background.color'];co.arc(this.centerx,this.centery,this.radius-borderWidth-4,0,RG.TWOPI,0);co.fill();if(prop['chart.background.gradient']){co.beginPath();co.fillStyle=RG.RadialGradient(this,this.centerx,this.centery,0,this.centerx,this.centery,this.radius,'rgba(255,255,255,0.6)','rgba(255,255,255,0.1)');co.arc(this.centerx,this.centery,this.radius-borderWidth-4,0,RG.TWOPI,0);co.fill();}\nco.beginPath();co.strokeStyle=prop['chart.border.outline'];co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,0);co.stroke();};this.drawSmallTickmarks=this.DrawSmallTickmarks=function()\n{var numTicks=prop['chart.tickmarks.small'];co.lineWidth=1;for(var i=0;i<=numTicks;++i){co.beginPath();co.strokeStyle=prop['chart.tickmarks.small.color'];var a=(((this.endAngle-this.startAngle)/numTicks)*i)+this.startAngle;co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10,a,a+0.00001,0);co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10-5,a,a+0.00001,0);co.stroke();}};this.drawMediumTickmarks=this.DrawMediumTickmarks=function()\n{if(prop['chart.tickmarks.medium']){var numTicks=prop['chart.tickmarks.medium'];co.lineWidth=3;co.lineCap='round';co.strokeStyle=prop['chart.tickmarks.medium.color'];for(var i=0;i<=numTicks;++i){co.beginPath();var a=(((this.endAngle-this.startAngle)/numTicks)*i)+this.startAngle+(((this.endAngle-this.startAngle)/(2*numTicks)));if(a>this.startAngle&&a<this.endAngle){co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10,a,a+0.00001,0);co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10-6,a,a+0.00001,0);}\nco.stroke();}}};this.drawBigTickmarks=this.DrawBigTickmarks=function()\n{var numTicks=prop['chart.tickmarks.big'];co.lineWidth=3;co.lineCap='round';for(var i=0;i<=numTicks;++i){co.beginPath();co.strokeStyle=prop['chart.tickmarks.big.color'];var a=(((this.endAngle-this.startAngle)/numTicks)*i)+this.startAngle;co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10,a,a+0.00001,0);co.arc(this.centerx,this.centery,this.radius-prop['chart.border.width']-10-10,a,a+0.00001,0);co.stroke();}};this.drawCenterpin=this.DrawCenterpin=function()\n{var offset=6;var grad=co.createRadialGradient(this.centerx+offset,this.centery-offset,0,this.centerx+offset,this.centery-offset,25);grad.addColorStop(0,'#ddf');grad.addColorStop(1,prop['chart.centerpin.color']);co.beginPath();co.fillStyle=grad;co.arc(this.centerx,this.centery,this.centerpinRadius,0,RG.TWOPI,0);co.fill();};this.drawLabels=this.DrawLabels=function()\n{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],size=prop['chart.text.size'],num=prop['chart.labels.specific']?(prop['chart.labels.specific'].length-1):prop['chart.labels.count'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety'],offseta=prop['chart.labels.offset.angle'];co.beginPath();if(num){for(var i=0;i<=num;++i){var hyp=(this.radius-25-prop['chart.border.width'])-prop['chart.labels.offset.radius'];var a=(this.endAngle-this.startAngle)/num\na=this.startAngle+(i*a);a-=RG.HALFPI;a+=offseta;var x=this.centerx-(ma.sin(a)*hyp);var y=this.centery+(ma.cos(a)*hyp);var hAlign=x>this.centerx?'right':'left';var vAlign=y>this.centery?'bottom':'top';if(a==RG.HALFPI){vAlign='center';}else if(a==RG.PI){hAlign='center';}else if(a==(RG.HALFPI+RG.PI)){vAlign='center';}\nif(prop['chart.labels.centered']){hAlign='center';vAlign='center';}\nvar value=(((this.max-this.min)*(i/num))+this.min);RG.text2(this,{font:font,size:size,x:x+offsetx,y:y+offsety,text:prop['chart.labels.specific']?prop['chart.labels.specific'][i]:RG.numberFormat(this,value.toFixed(prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']),halign:hAlign,valign:vAlign,tag:prop['chart.labels.specific']?'labels.specific':'labels'});}}\nco.fill();if(prop['chart.value.text']){var x=this.centerx,y=this.centery+(prop['chart.value.text.y.pos']*this.radius),units_pre=typeof(prop['chart.value.text.units.pre'])=='string'?prop['chart.value.text.units.pre']:prop['chart.units.pre'],units_post=typeof(prop['chart.value.text.units.post'])=='string'?prop['chart.value.text.units.post']:prop['chart.units.post'],bounding=prop['chart.value.text.bounding'],boundingFill=prop['chart.value.text.bounding.fill'],boundingStroke=prop['chart.value.text.bounding.stroke'],color=typeof prop['chart.value.text.color']==='string'?prop['chart.value.text.color']:prop['chart.text.color'],font=typeof prop['chart.value.text.font']==='string'?prop['chart.value.text.font']:prop['chart.text.font'],size=typeof prop['chart.value.text.size']==='number'?RG.stringsToNumbers(prop['chart.value.text.size']):prop['chart.text.size']+4,italic=typeof prop['chart.value.text.italic']==='boolean'?prop['chart.value.text.italic']:false,bold=typeof prop['chart.value.text.bold']==='boolean'?prop['chart.value.text.bold']:false,decimals=typeof prop['chart.value.text.decimals']==='number'?prop['chart.value.text.decimals']:prop['chart.scale.decimals'];co.fillStyle=color;if(typeof this.value==='number'){var text=RG.numberFormat(this,(prop['chart.value.text.actual']?this.valueOriginal:this.value).toFixed(decimals),units_pre,units_post);}else{var text=[];for(var i=0;i<this.value.length;++i){text[i]=RG.numberFormat(this,this.value[i].toFixed(decimals),units_pre,units_post);}\ntext=text.join(', ')}\nRG.text2(this,{font:font,size:size,x:x,y:y,text:text,halign:'center',valign:'center',italic:italic,bold:bold,bounding:bounding,'bounding.fill':boundingFill,'bounding.stroke':boundingStroke,tag:'value.text'});}};this.drawTopTitle=this.DrawTopTitle=function()\n{var x=this.centerx;var y=this.centery-25;if(typeof(prop['chart.title.top.pos'])=='number'){y=this.centery-(this.radius*prop['chart.title.top.pos']);}\nif(prop['chart.title.top']){co.fillStyle=prop['chart.title.top.color'];RG.text2(this,{font:prop['chart.title.top.font'],size:prop['chart.title.top.size'],x:x,y:y,text:String(prop['chart.title.top']),halign:'center',valign:'bottom',italic:prop['chart.title.bottom.italic'],bold:prop['chart.title.top.bold'],tag:'title.top'});}};this.drawBottomTitle=this.DrawBottomTitle=function()\n{var x=this.centerx;var y=this.centery+this.centerpinRadius+10;if(typeof(prop['chart.title.bottom.pos'])=='number'){y=this.centery+(this.radius*prop['chart.title.bottom.pos']);}\nif(prop['chart.title.bottom']){co.fillStyle=prop['chart.title.bottom.color'];RG.text2(this,{font:prop['chart.title.bottom.font'],size:prop['chart.title.bottom.size'],x:x,y:y,text:String(prop['chart.title.bottom']),halign:'center',valign:'top',bold:prop['chart.title.bottom.bold'],tag:'title.bottom'});}};this.drawNeedle=this.DrawNeedle=function(value,color,index)\n{var type=prop['chart.needle.type'];co.lineWidth=0.5;co.strokeStyle='gray';co.fillStyle=color;var angle=(this.endAngle-this.startAngle)*((value-this.min)/(this.max-this.min));angle+=this.startAngle;if(typeof(prop['chart.needle.size'])=='object'&&prop['chart.needle.size']&&typeof(prop['chart.needle.size'][index])=='number'){var size=prop['chart.needle.size'][index];}else if(typeof(prop['chart.needle.size'])=='number'){var size=prop['chart.needle.size'];}else{var size=this.radius-25-prop['chart.border.width'];}\nif(type=='line'){co.beginPath();co.lineWidth=prop['chart.needle.width'];co.strokeStyle=color;co.arc(this.centerx,this.centery,size,angle,angle+0.0001,false);co.lineTo(this.centerx,this.centery);if(prop['chart.needle.tail']){co.arc(this.centerx,this.centery,this.radius*0.2,angle+RG.PI,angle+0.00001+RG.PI,false);}\nco.lineTo(this.centerx,this.centery);co.stroke();}else{co.beginPath();co.arc(this.centerx,this.centery,size,angle,angle+0.00001,false);co.arc(this.centerx,this.centery,this.centerpinRadius*0.5,angle+RG.HALFPI,angle+0.00001+RG.HALFPI,false);if(prop['chart.needle.tail']){co.arc(this.centerx,this.centery,this.radius*0.2,angle+RG.PI,angle+0.00001+RG.PI,false);}\nco.arc(this.centerx,this.centery,this.centerpinRadius*0.5,angle-RG.HALFPI,angle-0.00001-RG.HALFPI,false);co.stroke();co.fill();this.angle=angle;}};this.drawColorBands=this.DrawColorBands=function()\n{if(RG.is_array(prop['chart.colors.ranges'])){var ranges=prop['chart.colors.ranges'];for(var i=0;i<ranges.length;++i){co.fillStyle=ranges[i][2];co.lineWidth=0;co.beginPath();co.arc(this.centerx,this.centery,this.radius-10-prop['chart.border.width'],(((ranges[i][0]-this.min)/(this.max-this.min))*(this.endAngle-this.startAngle))+this.startAngle,(((ranges[i][1]-this.min)/(this.max-this.min))*(this.endAngle-this.startAngle))+this.startAngle,false);co.arc(this.centerx,this.centery,this.radius-10-prop['chart.border.width']-(typeof ranges[i][3]==='number'?ranges[i][3]:10),(((ranges[i][1]-this.min)/(this.max-this.min))*(this.endAngle-this.startAngle))+this.startAngle,(((ranges[i][0]-this.min)/(this.max-this.min))*(this.endAngle-this.startAngle))+this.startAngle,true);co.closePath();co.fill();}\nreturn;}\nco.strokeStyle=prop['chart.green.color'];co.fillStyle=prop['chart.green.color'];var greenStart=this.startAngle;var greenEnd=this.startAngle+(this.endAngle-this.startAngle)*((prop['chart.green.end']-this.min)/(this.max-this.min))\nco.beginPath();co.arc(this.centerx,this.centery,this.radius-10-prop['chart.border.width'],greenStart,greenEnd,false);co.arc(this.centerx,this.centery,this.radius-(10+prop['chart.green.width'])-prop['chart.border.width'],greenEnd,greenStart,true);co.fill();co.strokeStyle=prop['chart.yellow.color'];co.fillStyle=prop['chart.yellow.color'];var yellowStart=greenEnd;var yellowEnd=this.startAngle+(this.endAngle-this.startAngle)*((prop['chart.red.start']-this.min)/(this.max-this.min))\nco.beginPath();co.arc(this.centerx,this.centery,this.radius-10-prop['chart.border.width'],yellowStart,yellowEnd,false);co.arc(this.centerx,this.centery,this.radius-(10+prop['chart.yellow.width'])-prop['chart.border.width'],yellowEnd,yellowStart,true);co.fill();co.strokeStyle=prop['chart.red.color'];co.fillStyle=prop['chart.red.color'];var redStart=yellowEnd;var redEnd=this.startAngle+(this.endAngle-this.startAngle)*((this.max-this.min)/(this.max-this.min))\nco.beginPath();co.arc(this.centerx,this.centery,this.radius-10-prop['chart.border.width'],redStart,redEnd,false);co.arc(this.centerx,this.centery,this.radius-(10+prop['chart.red.width'])-prop['chart.border.width'],redEnd,redStart,true);co.fill();};this.getShape=function(e){};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var angle=RG.getAngleByXY(this.centerx,this.centery,mouseX,mouseY);if(angle>=0&&angle<=RG.HALFPI){angle+=RG.TWOPI;}\nvar value=((angle-this.startAngle)/(this.endAngle-this.startAngle))*(this.max-this.min);value=value+this.min;if(value<this.min){value=this.min}\nif(value>this.max){value=this.max}\nreturn value;};this.getObjectByXY=function(e)\n{var mouseXY=RGraph.getMouseXY(e);if(mouseXY[0]>(this.centerx-this.radius)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+this.radius)&&RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1])<=this.radius){return this;}};this.drawGradient=this.DrawGradient=function()\n{if(prop['chart.border.gradient']){co.beginPath();var grad=co.createRadialGradient(this.centerx,this.centery,this.radius,this.centerx,this.centery,this.radius-15);grad.addColorStop(0,'gray');grad.addColorStop(1,'white');co.fillStyle=grad;co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,false)\nco.arc(this.centerx,this.centery,this.radius-15,RG.TWOPI,0,true)\nco.fill();}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){this.value=this.getValue(e);RG.redrawCanvas(this.canvas);RG.fireCustomEvent(this,'onadjust');}};this.getAngle=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar angle=(((value-this.min)/(this.max-this.min))*(this.endAngle-this.startAngle))+this.startAngle;return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.background.color']=RG.array_clone(prop['chart.background.color']);this.original_colors['chart.red.color']=RG.array_clone(prop['chart.red.color']);this.original_colors['chart.yellow.color']=RG.array_clone(prop['chart.yellow.color']);this.original_colors['chart.green.color']=RG.array_clone(prop['chart.green.color']);this.original_colors['chart.border.inner']=RG.array_clone(prop['chart.border.inner']);this.original_colors['chart.border.outer']=RG.array_clone(prop['chart.border.outer']);this.original_colors['chart.colors.ranges']=RG.array_clone(prop['chart.colors.ranges']);this.original_colors['chart.needle.colors']=RG.array_clone(prop['chart.needle.colors']);}\nprop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.red.color']=this.parseSingleColorForGradient(prop['chart.red.color']);prop['chart.yellow.color']=this.parseSingleColorForGradient(prop['chart.yellow.color']);prop['chart.green.color']=this.parseSingleColorForGradient(prop['chart.green.color']);prop['chart.border.inner']=this.parseSingleColorForGradient(prop['chart.border.inner']);prop['chart.border.outer']=this.parseSingleColorForGradient(prop['chart.border.outer']);if(prop['chart.colors.ranges']){var ranges=prop['chart.colors.ranges'];for(var i=0;i<ranges.length;++i){ranges[i][2]=this.parseSingleColorForGradient(ranges[i][2],this.radius-30);}}\nif(prop['chart.needle.colors']){var colors=prop['chart.needle.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{var radiusStart=arguments[1]||0;if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,radiusStart,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this,opt=arguments[0]?arguments[0]:{},callback=arguments[1]?arguments[1]:function(){},frames=opt.frames||30,frame=0;if(typeof this.value==='number'){var origValue=Number(this.currentValue);if(this.currentValue==null){this.currentValue=this.min;origValue=this.min;}\nvar newValue=this.value,diff=newValue-origValue;var iterator=function()\n{obj.value=((frame/frames)*diff)+origValue;if(obj.value>obj.max)obj.value=obj.max;if(obj.value<obj.min)obj.value=obj.min;RG.redrawCanvas(obj.canvas);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}};iterator();}else{if(this.currentValue==null){this.currentValue=[];for(var i=0;i<this.value.length;++i){this.currentValue[i]=this.min;}\norigValue=RG.arrayClone(this.currentValue);}\nvar origValue=RG.arrayClone(this.currentValue);var newValue=RG.arrayClone(this.value);var diff=[];for(var i=0,len=newValue.length;i<len;++i){diff[i]=newValue[i]-Number(this.currentValue[i]);}\nvar iterator=function()\n{frame++;for(var i=0,len=obj.value.length;i<len;++i){obj.value[i]=((frame/frames)*diff[i])+origValue[i];if(obj.value[i]>obj.max)obj.value[i]=obj.max;if(obj.value[i]<obj.min)obj.value[i]=obj.min;}\nRG.redrawCanvas(obj.canvas);if(frame<frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}};iterator();}\nreturn this;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.hbar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.HBar=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var data=conf.data;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var data=arguments[1];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.data=data;this.type='hbar';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coords=[];this.coords2=[];this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.max=0;this.stackedOrGrouped=false;this.properties={'chart.gutter.left':75,'chart.gutter.left.autosize':false,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.width':1,'chart.background.grid.hsize':25,'chart.background.grid.vsize':25,'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid.hlines':true,'chart.background.grid.vlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':null,'chart.background.grid.autofit.numvlines':5,'chart.background.grid.dashed':false,'chart.background.grid.dotted':false,'chart.background.color':null,'chart.linewidth':1,'chart.title':'','chart.title.background':null,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':0.8,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.xaxis.color':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.angle':0,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.colors':['red','blue','green','pink','yellow','cyan','navy','gray','black'],'chart.colors.sequential':false,'chart.xlabels.specific':null,'chart.labels':[],'chart.labels.bold':false,'chart.labels.color':null,'chart.labels.above':false,'chart.labels.above.decimals':0,'chart.labels.above.specific':null,'chart.labels.above.color':null,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.labels.above.font':null,'chart.labels.above.size':null,'chart.labels.above.bold':false,'chart.labels.above.italic':false,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.xlabels.offsetx':0,'chart.xlabels.offsety':0,'chart.xlabels':true,'chart.xlabels.count':5,'chart.contextmenu':null,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.units.pre':'','chart.units.post':'','chart.units.ingraph':false,'chart.strokestyle':'rgba(0,0,0,0)','chart.xmin':0,'chart.xmax':0,'chart.axis.color':'black','chart.shadow':false,'chart.shadow.color':'#666','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.vmargin':2,'chart.vmargin.grouped':2,'chart.grouping':'grouped','chart.tooltips':null,'chart.tooltips.event':'onclick','chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.highlight.fill':'rgba(255,255,255,0.7)','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.style':null,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.decimals':null,'chart.scale.zerostart':true,'chart.noredraw':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.noxaxis':false,'chart.noyaxis':false,'chart.noaxes':false,'chart.noxtickmarks':false,'chart.noytickmarks':false,'chart.numyticks':data.length,'chart.numxticks':10,'chart.variant':'hbar','chart.variant.threed.angle':0.1,'chart.variant.threed.offsetx':10,'chart.variant.threed.offsety':5,'chart.variant.threed.xaxis':true,'chart.variant.threed.yaxis':true,'chart.yaxispos':'left','chart.variant':'hbar','chart.clearto':'rgba(0,0,0,0)','chart.adjustable':false,'chart.adjustable.only':null}\nif(!this.canvas){alert('[HBAR] No canvas support');return;}\nfor(i=0,len=this.data.length;i<len;++i){if(typeof this.data[i]=='object'&&!RGraph.isNull(this.data[i])){this.stackedOrGrouped=true;for(var j=0,len2=this.data[i].length;j<len2;++j){if(typeof this.data[i][j]==='string'){this.data[i][j]=parseFloat(this.data[i][j]);}}}else if(typeof this.data[i]=='string'){this.data[i]=parseFloat(this.data[i])||0;}else if(typeof this.data[i]==='undefined'){this.data[i]=null;}}\nvar linear_data=RGraph.arrayLinearize(data);for(var i=0,len=linear_data.length;i<len;++i){this['$'+i]={};}\nthis.data_arr=RGraph.arrayLinearize(this.data);if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.labels.abovebar'){name='chart.labels.above';}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.labels.abovebar'){name='chart.labels.above';}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(prop['chart.adjustable']&&prop['chart.grouping']==='stacked'){alert('[RGRAPH] The HBar does not support stacked charts with adjusting');}\nif(prop['chart.variant']==='3d'){if(prop['chart.text.accessible']){}else{co.setTransform(1,prop['chart.variant.threed.angle'],0,1,0.5,0.5);}\nif(prop['chart.gutter.bottom']===25){this.set('gutterBottom',80);}}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nif(prop['chart.gutter.left.autosize']){var len=0;var labels=prop['chart.labels'];var font=prop['chart.text.font'];var size=prop['chart.text.size'];for(var i=0;i<labels.length;i+=1){var length=RG.measureText(labels[i],false,font,size)[0]||0\nlen=ma.max(len,length);}\nprop['chart.gutter.left']=len+10;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.coords=[];this.coords2=[];this.coordsText=[];this.max=0;if(prop['chart.xmin']>0&&prop['chart.grouping']=='stacked'){alert('[HBAR] Using chart.xmin is not supported with stacked charts, resetting chart.xmin to zero');this.Set('chart.xmin',0);}\nthis.graphwidth=ca.width-this.gutterLeft-this.gutterRight;this.graphheight=ca.height-this.gutterTop-this.gutterBottom;this.halfgrapharea=this.grapharea/2;this.halfTextHeight=prop['chart.text.size']/2;this.halfway=ma.round((this.graphwidth/2)+this.gutterLeft)\nRG.Background.draw(this);this.drawbars();this.drawAxes();this.drawLabels();if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nRG.DrawInGraphLabels(this);if(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawAxes=this.DrawAxes=function()\n{var halfway=this.halfway\nco.beginPath();co.lineWidth=prop['chart.axis.linewidth']?prop['chart.axis.linewidth']+0.001:1.001;co.strokeStyle=prop['chart.axis.color'];if(prop['chart.noyaxis']==false&&prop['chart.noaxes']==false){if(prop['chart.yaxispos']=='center'){co.moveTo(halfway,this.gutterTop);co.lineTo(halfway,ca.height-this.gutterBottom);}else if(prop['chart.yaxispos']=='right'){co.moveTo(ca.width-this.gutterRight,this.gutterTop);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);}else{co.moveTo(this.gutterLeft,this.gutterTop);co.lineTo(this.gutterLeft,ca.height-this.gutterBottom);}}\nif(prop['chart.noxaxis']==false&&prop['chart.noaxes']==false){co.moveTo(this.gutterLeft+0.001,ca.height-this.gutterBottom+0.001);co.lineTo(ca.width-this.gutterRight+0.001,ca.height-this.gutterBottom+0.001);}\nif(prop['chart.noytickmarks']==false&&prop['chart.noyaxis']==false&&prop['chart.numyticks']>0&&prop['chart.noaxes']==false){var yTickGap=(ca.height-this.gutterTop-this.gutterBottom)/(prop['chart.numyticks']>0?prop['chart.numyticks']:this.data.length);for(y=this.gutterTop;y<(ca.height-this.gutterBottom-1);y+=yTickGap){if(prop['chart.yaxispos']=='center'){co.moveTo(halfway+3,ma.round(y));co.lineTo(halfway-3,ma.round(y));}else if(prop['chart.yaxispos']=='right'){co.moveTo(ca.width-this.gutterRight,ma.round(y));co.lineTo(ca.width-this.gutterRight+3,ma.round(y));}else{co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft-3,ma.round(y));}}\nif(prop['chart.noxaxis']==true){if(prop['chart.yaxispos']=='center'){co.moveTo(halfway+3,ma.round(y));co.lineTo(halfway-3,ma.round(y));}else if(prop['chart.yaxispos']=='right'){co.moveTo(ca.width-this.gutterRight,ma.round(y));co.lineTo(ca.width-this.gutterRight+3,ma.round(y));}else{co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft-3,ma.round(y));}}}\nif(prop['chart.noxtickmarks']==false&&prop['chart.noxaxis']==false&&prop['chart.numxticks']>0&&prop['chart.noaxes']==false){xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];yStart=ca.height-this.gutterBottom;yEnd=(ca.height-this.gutterBottom)+3;var i=prop['chart.numxticks']\nwhile(i--){var x=ca.width-this.gutterRight-(i*xTickGap);if(prop['chart.yaxispos']==='right'){x-=xTickGap;}\nco.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}\nif(prop['chart.yaxispos']==='center'){var i=5;while(i--){var x=this.gutterLeft+(xTickGap*i);co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}}\nif(prop['chart.noyaxis']==true){co.moveTo(this.gutterLeft,ma.round(yStart));co.lineTo(this.gutterLeft,ma.round(yEnd));}}\nco.stroke();co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()\n{var units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],text_size=prop['chart.text.size'],font=prop['chart.text.font'],offsetx=prop['chart.xlabels.offsetx'],offsety=prop['chart.xlabels.offsety']\nif(prop['chart.units.ingraph']){units_pre='';units_post='';}\nif(prop['chart.xlabels']){if(RG.isArray(prop['chart.xlabels.specific'])){if(prop['chart.yaxispos']=='center'){var halfGraphWidth=this.graphwidth/2;var labels=prop['chart.xlabels.specific'];var interval=(this.graphwidth/2)/(labels.length-1);co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;i+=1){RG.text2(this,{font:font,size:text_size,x:this.gutterLeft+halfGraphWidth+(interval*i)+offsetx,y:ca.height-this.gutterBottom+offsetx,text:labels[i],valign:'top',halign:prop['chart.text.angle']!==0?'right':'center',tag:'scale',angle:-1*prop['chart.text.angle']});}\nfor(var i=(labels.length-1);i>0;i-=1){RG.Text2(this,{'font':font,'size':text_size,'x':this.gutterLeft+(interval*(labels.length-i-1))+offsetx,'y':ca.height-this.gutterBottom+offsety,'text':labels[i],'valign':'top','halign':prop['chart.text.angle']!==0?'right':'center','tag':'scale',angle:-1*prop['chart.text.angle']});}}else if(prop['chart.yaxispos']=='right'){var labels=prop['chart.xlabels.specific'];var interval=this.graphwidth/(labels.length-1);co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;i+=1){RG.text2(this,{'font':font,'size':text_size,'x':this.gutterLeft+(interval*i)+offsetx,'y':ca.height-this.gutterBottom+offsety,'text':labels[labels.length-i-1],'valign':'top','halign':prop['chart.text.angle']!==0?'right':'center','tag':'scale',angle:-1*prop['chart.text.angle']});}}else{var labels=prop['chart.xlabels.specific'];var interval=this.graphwidth/(labels.length-1);co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;i+=1){RG.text2(this,{font:font,size:text_size,x:this.gutterLeft+(interval*i)+offsetx,y:ca.height-this.gutterBottom+offsety,text:labels[i],valign:'top',halign:prop['chart.text.angle']!==0?'right':'center',tag:'scale',angle:-1*prop['chart.text.angle']});}}}else{var gap=7;co.beginPath();co.fillStyle=prop['chart.text.color'];if(prop['chart.yaxispos']=='center'){for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{font:font,size:text_size,x:this.gutterLeft+(this.graphwidth/2)-((this.graphwidth/2)*((i+1)/this.scale2.labels.length))+offsetx,y:this.gutterTop+this.halfTextHeight+this.graphheight+gap+offsety,text:'-'+this.scale2.labels[i],valign:'center',halign:(typeof prop['chart.text.angle']==='number'&&prop['chart.text.angle']!==0)?'right':'center',tag:'scale',angle:-1*prop['chart.text.angle']});}\nfor(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{font:font,size:text_size,x:this.gutterLeft+((this.graphwidth/2)*((i+1)/this.scale2.labels.length))+(this.graphwidth/2)+offsetx,y:this.gutterTop+this.halfTextHeight+this.graphheight+gap+offsety,text:this.scale2.labels[i],valign:'center',halign:prop['chart.text.angle']!==0?'right':'center',tag:'scale',angle:-1*prop['chart.text.angle']});}}else if(prop['chart.yaxispos']=='right'){for(var i=0,len=this.scale2.labels.length;i<len;++i){RG.Text2(this,{'font':font,'size':text_size,'x':this.gutterLeft+(i*(this.graphwidth/len))+offsetx,'y':this.gutterTop+this.halfTextHeight+this.graphheight+gap+offsety,'text':'-'+this.scale2.labels[len-1-i],'valign':'center','halign':prop['chart.text.angle']!==0?'right':'center','tag':'scale',angle:-1*prop['chart.text.angle']});}}else{for(var i=0,len=this.scale2.labels.length;i<len;++i){RG.Text2(this,{font:font,size:text_size,x:this.gutterLeft+(this.graphwidth*((i+1)/len))+offsetx,y:this.gutterTop+this.halfTextHeight+this.graphheight+gap+offsety,text:this.scale2.labels[i],valign:'center',halign:prop['chart.text.angle']!==0?'right':'center',tag:'scale',angle:-1*prop['chart.text.angle']});}}\nif(prop['chart.xmin']>0||prop['chart.noyaxis']==true||prop['chart.scale.zerostart']||prop['chart.noaxes']){var x=prop['chart.yaxispos']=='center'?this.gutterLeft+(this.graphwidth/2):this.gutterLeft;if(prop['chart.yaxispos']==='right'){var x=ca.width-this.gutterRight;}\nRG.text2(this,{'font':font,'size':text_size,'x':x+offsetx,'y':this.gutterTop+this.halfTextHeight+this.graphheight+gap+offsety,'text':RG.numberFormat(this,prop['chart.xmin'].toFixed(prop['chart.xmin']===0?0:prop['chart.scale.decimals']),units_pre,units_post),'valign':'center',halign:prop['chart.text.angle']!==0?'right':'center','tag':'scale',angle:-1*prop['chart.text.angle']});}\nco.fill();co.stroke();}}\nif(typeof prop['chart.labels']=='object'){var xOffset=prop['chart.variant']==='3d'&&prop['chart.yaxispos']==='right'?15:5,font=prop['chart.text.font'],color=prop['chart.labels.color']||prop['chart.text.color'],bold=prop['chart.labels.bold'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety']\nco.fillStyle=color;var barHeight=(ca.height-this.gutterTop-this.gutterBottom)/prop['chart.labels'].length;yTickGap=(ca.height-this.gutterTop-this.gutterBottom)/prop['chart.labels'].length\nif(prop['chart.yaxispos']==='right'){var x=ca.width-this.gutterRight+xOffset;var halign='left'}else{var x=this.gutterLeft-xOffset;var halign='right'}\nvar i=0;for(y=this.gutterTop+(yTickGap/2);y<=ca.height-this.gutterBottom;y+=yTickGap){RG.text2(this,{'font':font,'size':prop['chart.text.size'],'bold':bold,'x':x+offsetx,'y':y+offsety,'text':String(prop['chart.labels'][i++]),'halign':halign,'valign':'center','tag':'labels'});}}};this.drawbars=this.Drawbars=function()\n{co.lineWidth=prop['chart.linewidth'];co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][0];var prevX=0,prevY=0;if(prop['chart.xmax']){this.scale2=RG.getScale2(this,{'max':prop['chart.xmax'],'min':prop['chart.xmin'],'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.xlabels.count'],'strict':true});this.max=this.scale2.max;}else{var grouping=prop['chart.grouping'];for(i=0;i<this.data.length;++i){if(typeof(this.data[i])=='object'){var value=grouping=='grouped'?Number(RG.array_max(this.data[i],true)):Number(RG.array_sum(this.data[i]));}else{var value=Number(ma.abs(this.data[i]));}\nthis.max=ma.max(Math.abs(this.max),Math.abs(value));}\nthis.scale2=RG.getScale2(this,{'max':this.max,'min':prop['chart.xmin'],'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.xlabels.count']});this.max=this.scale2.max;this.min=this.scale2.min;}\nif(prop['chart.scale.decimals']==null&&Number(this.max)==1){this.Set('chart.scale.decimals',1);}\nvar colorIdx=0;this.numbars=RG.arrayLinearize(this.data).length;if(prop['chart.adjustable']&&!prop['chart.xmax']){this.set('chart.xmax',this.scale2.max);}\nif(prop['chart.variant']==='3d'){RG.draw3DAxes(this);}\nvar graphwidth=(ca.width-this.gutterLeft-this.gutterRight);var halfwidth=graphwidth/2;for(i=(len=this.data.length-1);i>=0;--i){var width=ma.abs((this.data[i]/this.max)*graphwidth);var height=this.graphheight/this.data.length;var orig_height=height;var x=this.gutterLeft;var y=this.gutterTop+(i*height);var vmargin=prop['chart.vmargin'];if(prop['chart.yaxispos']==='right'){x=ca.width-this.gutterRight-ma.abs(width);}\nif(width<0){x-=width;width=ma.abs(width);}\nif(prop['chart.shadow']){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}\nco.beginPath();if(typeof this.data[i]=='number'||RG.isNull(this.data[i])){var barHeight=height-(2*vmargin),barWidth=((this.data[i]-prop['chart.xmin'])/(this.max-prop['chart.xmin']))*this.graphwidth,barX=this.gutterLeft;if(prop['chart.yaxispos']=='center'){barWidth/=2;barX+=halfwidth;if(this.data[i]<0){barWidth=(ma.abs(this.data[i])-prop['chart.xmin'])/(this.max-prop['chart.xmin']);barWidth=barWidth*(this.graphwidth/2);barX=((this.graphwidth/2)+this.gutterLeft)-barWidth;}}else if(prop['chart.yaxispos']=='right'){barWidth=ma.abs(barWidth);barX=ca.width-this.gutterRight-barWidth;}\nco.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][0];++colorIdx;if(prop['chart.colors.sequential']&&typeof colorIdx==='number'){if(prop['chart.colors'][this.numbars-colorIdx]){co.fillStyle=prop['chart.colors'][this.numbars-colorIdx];}else{co.fillStyle=prop['chart.colors'][prop['chart.colors'].length-1];}}\nco.strokeRect(barX,this.gutterTop+(i*height)+prop['chart.vmargin'],barWidth,barHeight);co.fillRect(barX,this.gutterTop+(i*height)+prop['chart.vmargin'],barWidth,barHeight);this.coords.push([barX,y+vmargin,barWidth,height-(2*vmargin),co.fillStyle,this.data[i],true]);if(prop['chart.variant']==='3d'&&typeof this.data[i]=='number'){var prevStrokeStyle=co.strokeStyle,prevFillStyle=co.fillStyle;RG.noShadow(this);var barX=barX,barY=y+vmargin,barW=barWidth,barH=height-(2*vmargin),offsetX=prop['chart.variant.threed.offsetx'],offsetY=prop['chart.variant.threed.offsety'],value=this.data[i];pa2(co,['b','m',barX,barY,'l',barX+offsetX-(prop['chart.yaxispos']=='left'&&value<0?offsetX:0),barY-offsetY,'l',barX+barW+offsetX-(prop['chart.yaxispos']=='center'&&value<0?offsetX:0),barY-offsetY,'l',barX+barW,barY,'c','s',co.strokeStyle,'f',co.fillStyle,'f','rgba(255,255,255,0.6)']);if(prop['chart.yaxispos']!=='right'&&!(prop['chart.yaxispos']==='center'&&value<0)&&value>=0&&!RG.isNull(value)){pa2(co,['b','fs',prevFillStyle,'m',barX+barW,barY,'l',barX+barW+offsetX,barY-offsetY,'l',barX+barW+offsetX,barY-offsetY+barH,'l',barX+barW,barY+barH,'c','s',co.strokeStyle,'f',prevFillStyle,'f','rgba(0,0,0,0.25)']);}}}else if(typeof(this.data[i])=='object'&&prop['chart.grouping']=='stacked'){if(prop['chart.yaxispos']=='center'){alert('[HBAR] You can\\'t have a stacked chart with the Y axis in the center, change it to grouped');}else if(prop['chart.yaxispos']=='right'){var x=ca.width-this.gutterRight}\nvar barHeight=height-(2*vmargin);if(typeof this.coords2[i]=='undefined'){this.coords2[i]=[];}\nfor(j=0;j<this.data[i].length;++j){if(prop['chart.shadow']&&prop['chart.variant']==='3d'){co.shadowColor=prop['chart.shadow.color'];co.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}\nif(!RG.isNull(this.data[i][j]))this.data[i][j]=ma.abs(this.data[i][j]);var last=(j===(this.data[i].length-1));co.strokeStyle=prop['chart.strokestyle'];++colorIdx;if(prop['chart.colors.sequential']&&typeof colorIdx==='number'){if(prop['chart.colors'][this.numbars-colorIdx]){co.fillStyle=prop['chart.colors'][this.numbars-colorIdx];}else{co.fillStyle=prop['chart.colors'][prop['chart.colors'].length-1];}}else if(prop['chart.colors'][j]){co.fillStyle=prop['chart.colors'][j];}\nvar width=(((this.data[i][j])/(this.max)))*this.graphwidth;var totalWidth=(RG.arraySum(this.data[i])/this.max)*this.graphwidth;if(prop['chart.yaxispos']==='right'){x-=width;}\nco.strokeRect(x,this.gutterTop+prop['chart.vmargin']+(this.graphheight/this.data.length)*i,width,height-(2*vmargin));co.fillRect(x,this.gutterTop+prop['chart.vmargin']+(this.graphheight/this.data.length)*i,width,height-(2*vmargin));this.coords.push([x,y+vmargin,width,height-(2*vmargin),co.fillStyle,RG.array_sum(this.data[i]),j==(this.data[i].length-1)]);this.coords2[i].push([x,y+vmargin,width,height-(2*vmargin),co.fillStyle,RG.array_sum(this.data[i]),j==(this.data[i].length-1)]);if(prop['chart.variant']==='3d'){RG.noShadow(this);var prevStrokeStyle=co.strokeStyle,prevFillStyle=co.fillStyle;var barX=x,barY=y+vmargin,barW=width,barH=height-(2*vmargin),offsetX=prop['chart.variant.threed.offsetx'],offsetY=prop['chart.variant.threed.offsety'],value=this.data[i][j];if(!RG.isNull(value)){pa2(co,['b','m',barX,barY,'l',barX+offsetX,barY-offsetY,'l',barX+barW+offsetX,barY-offsetY,'l',barX+barW,barY,'c','s',co.strokeStyle,'f',co.fillStyle,'f','rgba(255,255,255,0.6)']);}\nif(prop['chart.yaxispos']!=='right'&&!(prop['chart.yaxispos']==='center'&&value<0)&&!RG.isNull(value)){pa2(co,['fs',prevFillStyle,'b','m',barX+barW,barY,'l',barX+barW+offsetX,barY-offsetY,'l',barX+barW+offsetX,barY-offsetY+barH,'l',barX+barW,barY+barH,'c','s',co.strokeStyle,'f',prevFillStyle,'f','rgba(0,0,0,0.25)']);}\nco.beginPath();co.strokeStyle=prevStrokeStyle;co.fillStyle=prevFillStyle;}\nif(prop['chart.yaxispos']!=='right'){x+=width;}}}else if(typeof(this.data[i])=='object'&&prop['chart.grouping']=='grouped'){var vmarginGrouped=prop['chart.vmargin.grouped'];var individualBarHeight=((height-(2*vmargin)-((this.data[i].length-1)*vmarginGrouped))/this.data[i].length)\nif(typeof this.coords2[i]=='undefined'){this.coords2[i]=[];}\nfor(j=(this.data[i].length-1);j>=0;--j){if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.strokeStyle=prop['chart.strokestyle'];++colorIdx;if(prop['chart.colors.sequential']&&typeof colorIdx==='number'){if(prop['chart.colors'][this.numbars-colorIdx]){co.fillStyle=prop['chart.colors'][this.numbars-colorIdx];}else{co.fillStyle=prop['chart.colors'][prop['chart.colors'].length-1];}}else if(prop['chart.colors'][j]){co.fillStyle=prop['chart.colors'][j];}\nvar startY=this.gutterTop+(height*i)+(individualBarHeight*j)+vmargin+(vmarginGrouped*j);var width=((this.data[i][j]-prop['chart.xmin'])/(this.max-prop['chart.xmin']))*(ca.width-this.gutterLeft-this.gutterRight);var startX=this.gutterLeft;if(prop['chart.yaxispos']=='center'){width/=2;startX+=halfwidth;}else if(prop['chart.yaxispos']=='right'){width=ma.abs(width);startX=ca.width-this.gutterRight-ma.abs(width);;}\nif(width<0){startX+=width;width*=-1;}\nco.strokeRect(startX,startY,width,individualBarHeight);co.fillRect(startX,startY,width,individualBarHeight);this.coords.push([startX,startY,width,individualBarHeight,co.fillStyle,this.data[i][j],true]);this.coords2[i].push([startX,startY,width,individualBarHeight,co.fillStyle,this.data[i][j],true]);if(prop['chart.variant']==='3d'){RG.noShadow(this);var prevStrokeStyle=co.strokeStyle,prevFillStyle=co.fillStyle;var barX=startX,barY=startY,barW=width,barH=individualBarHeight,offsetX=prop['chart.variant.threed.offsetx'],offsetY=prop['chart.variant.threed.offsety'],value=this.data[i][j];pa2(co,['b','m',barX,barY,'l',barX+offsetX,barY-offsetY,'l',barX+barW+offsetX-(value<0?offsetX:0),barY-offsetY,'l',barX+barW,barY,'c','s',co.strokeStyle,'f',co.fillStyle,'f','rgba(255,255,255,0.6)']);if(prop['chart.yaxispos']!=='right'&&!(prop['chart.yaxispos']==='center'&&value<0)&&value>=0&&!RG.isNull(value)){pa2(co,['fs',prevFillStyle,'b','m',barX+barW,barY,'l',barX+barW+offsetX,barY-offsetY,'l',barX+barW+offsetX,barY-offsetY+barH,'l',barX+barW,barY+barH,'c','s',co.strokeStyle,'f',prevFillStyle,'f','rgba(0,0,0,0.25)']);}\nco.beginPath();co.strokeStyle=prevStrokeStyle;co.fillStyle=prevFillStyle;}}\nstartY+=vmargin;}\nco.closePath();}\nco.stroke();co.fill();if(prop['chart,yaxispos']==='right'){pa2(co,'cr % % % %',ca.width-this.gutterRight+prop['chart.variant.threed.offsetx'],'0',this.gutterRight,ca.height);}\nif(prop['chart.yaxispos']==='right'&&prop['chart.variant']==='3d'){RG.draw3DYAxis(this);}\nRG.noShadow(this);this.coords=RG.arrayReverse(this.coords);if(prop['chart.grouping']==='grouped'){for(var i=0;i<this.coords2.length;++i){this.coords2[i]=RG.arrayReverse(this.coords2[i]);}}\nthis.redrawBars();};this.redrawBars=this.RedrawBars=function()\n{if(prop['chart.noredraw']){return;}\nvar coords=this.coords;var font=prop['chart.text.font'],size=prop['chart.text.size'],color=prop['chart.text.color'];RG.noShadow(this);co.strokeStyle=prop['chart.strokestyle'];for(var i=0;i<coords.length;++i){if(prop['chart.shadow']){pa2(co,'b lw % r % % % % s % f %',prop['chart.linewidth'],coords[i][0],coords[i][1],coords[i][2],coords[i][3],prop['chart.strokestyle'],coords[i][4]);}\nvar halign='left';if(prop['chart.labels.above']&&coords[i][6]){var border=(coords[i][0]+coords[i][2]+7+co.measureText(prop['chart.labels.above.units.pre']+this.coords[i][5]+prop['chart.labels.above.units.post']).width)>ca.width?true:false,text=RG.numberFormat(this,(this.coords[i][5]).toFixed(prop['chart.labels.above.decimals']),prop['chart.labels.above.units.pre'],prop['chart.labels.above.units.post']);RG.noShadow(this);if(typeof prop['chart.labels.above.specific']==='object'&&prop['chart.labels.above.specific']&&prop['chart.labels.above.specific'][i]){text=prop['chart.labels.above.specific'][i];}\nvar x=coords[i][0]+coords[i][2]+5;var y=coords[i][1]+(coords[i][3]/2);if(prop['chart.yaxispos']==='right'){x=coords[i][0]-5;halign='right';}else if(prop['chart.yaxispos']==='center'&&this.data_arr[i]<0){x=coords[i][0]-5;halign='right';}\nRG.text2(this,{font:typeof prop['chart.labels.above.font']==='string'?prop['chart.labels.above.font']:font,size:typeof prop['chart.labels.above.size']==='number'?prop['chart.labels.above.size']:size,color:typeof prop['chart.labels.above.color']==='string'?prop['chart.labels.above.color']:color,x:x,y:y,bold:prop['chart.labels.above.bold'],italic:prop['chart.labels.above.italic'],text:text,valign:'center',halign:halign,tag:'labels.above'});}}};this.getShape=this.getBar=function(e)\n{var mouseXY=RG.getMouseXY(e);for(var i=0,len=this.coords.length;i<len;i++){var mouseX=mouseXY[0],mouseY=mouseXY[1],left=this.coords[i][0],top=this.coords[i][1],width=this.coords[i][2],height=this.coords[i][3],idx=i;pa2(co,['b','r',left,top,width,height]);if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,'object':this,1:left,'x':left,2:top,'y':top,3:width,'width':width,4:height,'height':height,5:idx,'index':idx,'tooltip':tooltip};}}};this.getValue=function(arg)\n{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}\nif(mouseY<this.gutterTop||mouseY>(ca.height-this.gutterBottom)||mouseX<this.gutterLeft||mouseX>(ca.width-this.gutterRight)){return null;}\nif(prop['chart.yaxispos']=='center'){var value=((mouseX-this.gutterLeft)/(this.graphwidth/2))*(this.max-prop['chart.xmin']);value=value-this.max\nif(prop['chart.xmin']>0){value=((mouseX-this.gutterLeft-(this.graphwidth/2))/(this.graphwidth/2))*(this.max-prop['chart.xmin']);value+=prop['chart.xmin'];if(mouseX<(this.gutterLeft+(this.graphwidth/2))){value-=(2*prop['chart.xmin']);}}}else if(prop['chart.yaxispos']=='right'){var value=((mouseX-this.gutterLeft)/this.graphwidth)*(this.scale2.max-prop['chart.xmin']);value=this.scale2.max-value;}else{var value=((mouseX-this.gutterLeft)/this.graphwidth)*(this.scale2.max-prop['chart.xmin']);value+=prop['chart.xmin'];}\nreturn value;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(prop['chart.variant']==='3d'){var adjustment=prop['chart.variant.threed.angle']*mouseXY[0];mouseXY[1]-=adjustment;}\nif(mouseXY[0]>=this.gutterLeft&&mouseXY[0]<=(ca.width-this.gutterRight)&&mouseXY[1]>=this.gutterTop&&mouseXY[1]<=(ca.height-this.gutterBottom)){return this;}};this.getXCoord=function(value)\n{if(prop['chart.yaxispos']=='center'){if(value>this.max||value<(-1*this.max)){return null;}\nvar width=(ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'])/2;var coord=(((value-prop['chart.xmin'])/(this.max-prop['chart.xmin']))*width)+width;coord=prop['chart.gutter.left']+coord;}else{if(value>this.max||value<0){return null;}\nvar width=ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'];var coord=((value-prop['chart.xmin'])/(this.max-prop['chart.xmin']))*width;coord=prop['chart.gutter.left']+coord;}\nreturn coord;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.background.grid.color']=RG.array_clone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.array_clone(prop['chart.background.color']);this.original_colors['chart.background.barcolor1']=RG.array_clone(prop['chart.background.barcolor1']);this.original_colors['chart.background.barcolor2']=RG.array_clone(prop['chart.background.barcolor2']);this.original_colors['chart.text.color']=RG.array_clone(prop['chart.text.color']);this.original_colors['chart.labels.colors']=RG.array_clone(prop['chart.labels.colors']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.axis.color']=RG.array_clone(prop['chart.axis.color']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);}\nvar colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}\nprop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);prop['chart.labels.colors']=this.parseSingleColorForGradient(prop['chart.labels.colors']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.axis.color']=this.parseSingleColorForGradient(prop['chart.axis.color']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');if(prop['chart.yaxispos']==='right'){parts=RG.arrayReverse(parts);}\nvar grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{var obj=this;this.coords2.forEach(function(value,idx,arr)\n{var shape=obj.coords2[idx][index]\nvar pre_linewidth=co.lineWidth;co.lineWidth=2;co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.fillRect(shape[0],shape[1],shape[2],shape[3]);co.strokeRect(shape[0],shape[1],shape[2],shape[3]);co.lineWidth=pre_linewidth;});};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.getShapeByY=function(e)\n{var mouseXY=RG.getMouseXY(e);var obj=arguments[1]?arguments[1]:this;for(var i=0,len=obj.coords.length;i<len;i++){if(obj.coords[i].length==0){continue;}\nvar mouseX=mouseXY[0],mouseY=mouseXY[1],left=obj.coords[i][0],top=obj.coords[i][1],width=obj.coords[i][2],height=obj.coords[i][3];if(mouseY>=top&&mouseY<=(top+height)){if(prop['chart.tooltips']){var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],i):prop['chart.tooltips'][i];}\nreturn{0:obj,object:obj,1:left,x:left,2:top,y:top,3:width,width:width,4:height,height:height,5:i,index:i,tooltip:tooltip};}}\nreturn null;};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.get('chart.adjusting')&&RG.Registry.get('chart.adjusting').uid==this.uid){var value=Number(this.getValue(e)),shape=RG.Registry.get('chart.adjusting.shape');if(shape){RG.Registry.Set('chart.adjusting.shape',shape);if(this.stackedOrGrouped&&prop['chart.grouping']=='grouped'){var indexes=RG.sequentialIndexToGrouped(shape['index'],this.data);if(typeof this.data[indexes[0]]=='number'){this.data[indexes[0]]=Number(value);}else if(!RG.is_null(this.data[indexes[0]])){this.data[indexes[0]][indexes[1]]=Number(value);}}else if(typeof this.data[shape['index']]=='number'){this.data[shape['index']]=Number(value);}\nRG.redrawCanvas(e.target);RG.fireCustomEvent(this,'onadjust');}}};this.grow=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){},labelsAbove=prop['chart.labels.above'];this.set('labelsAbove',false);obj.original_data=RG.arrayClone(obj.data);if(prop['chart.xmax']==0){var xmax=0;for(var i=0;i<obj.data.length;++i){if(RG.isArray(obj.data[i])&&prop['chart.grouping']=='stacked'){xmax=ma.max(xmax,RG.arraySum(obj.data[i]));}else if(RG.isArray(obj.data[i])&&prop['chart.grouping']=='grouped'){xmax=ma.max(xmax,RG.arrayMax(obj.data[i]));}else{xmax=ma.max(xmax,ma.abs(RG.arrayMax(obj.data[i])));}}\nvar scale2=RG.getScale2(obj,{'max':xmax});obj.Set('chart.xmax',scale2.max);}\nfunction iterator()\n{for(var j=0,len=obj.original_data.length;j<len;++j){var easingFactor=RG.Effects.getEasingMultiplier(frames,frame);if(typeof obj.data[j]==='object'&&obj.data[j]){for(var k=0,len2=obj.data[j].length;k<len2;++k){obj.data[j][k]=RG.isNull(obj.data[j][k])?null:obj.original_data[j][k]*easingFactor;}}else{obj.data[j]=RG.isNull(obj.data[j])?null:obj.original_data[j]*easingFactor;}}\nRG.redrawCanvas(obj.canvas);if(frame<frames){frame+=1;RG.Effects.updateCanvas(iterator);}else{if(labelsAbove){obj.set('labelsAbove',true);RG.redraw();}\ncallback(obj);}}\niterator();return this;};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){},obj=this,labelsAbove=this.get('labelsAbove')\nthis.original_data=RG.arrayClone(this.data);if(prop['chart.xmax']==0){var xmax=0;for(var i=0;i<obj.data.length;++i){if(RG.isArray(obj.data[i])&&prop['chart.grouping']=='stacked'){xmax=ma.max(xmax,RG.arraySum(obj.data[i]));}else if(RG.isArray(obj.data[i])&&prop['chart.grouping']=='grouped'){xmax=ma.max(xmax,RG.arrayMax(obj.data[i]));}else{xmax=ma.max(xmax,ma.abs(RG.arrayMax(obj.data[i])));}}\nvar scale2=RG.getScale2(obj,{'max':xmax});obj.Set('chart.xmax',scale2.max);}\nif(RG.isArray(opt.data)){var xmax=0;for(var i=0;i<opt.data.length;++i){if(typeof opt.data[i]==='object'){for(var j=0;j<opt.data[i].length;++j){if(typeof opt.data[i][j]==='string'&&opt.data[i][j].match(/(\\+|\\-)([0-9]+)/)){if(RegExp.$1==='+'){opt.data[i][j]=this.original_data[i][j]+parseInt(RegExp.$2);}else{opt.data[i][j]=this.original_data[i][j]-parseInt(RegExp.$2);}}\nxmax=ma.max(xmax,opt.data[i][j]);}}else if(typeof opt.data[i]==='string'&&opt.data[i].match(/(\\+|\\-)([0-9]+)/)){if(RegExp.$1==='+'){opt.data[i]=this.original_data[i]+parseFloat(RegExp.$2);}else{opt.data[i]=this.original_data[i]-parseFloat(RegExp.$2);}\nxmax=ma.max(xmax,opt.data[i]);}else{xmax=ma.max(xmax,opt.data[i]);}}\nvar scale=RG.getScale2(this,{'max':xmax});if(typeof this.get('chart.xmax')==='null'){this.set('chart.xmax',scale.max);}}\nthis.set('labelsAbove',false);if(RG.isNull(prop['chart.xmax'])){var xmax=0;for(var i=0;i<obj.data.length;++i){if(RG.isArray(this.data[i])&&prop['chart.grouping']==='stacked'){xmax=ma.max(xmax,ma.abs(RG.arraySum(this.data[i])));}else if(RG.isArray(this.data[i])&&prop['chart.grouping']==='grouped'){for(var j=0,group=[];j<this.data[i].length;j++){group.push(ma.abs(this.data[i][j]));}\nxmax=ma.max(xmax,ma.abs(RG.arrayMax(group)));}else{xmax=ma.max(xmax,ma.abs(this.data[i]));}}\nvar scale=RG.getScale2(this,{'max':xmax});this.Set('chart.xmax',scale.max);}\nif(typeof opt.xmax==='number'){obj.set('xmax',opt.xmax);}\nvar iterator=function()\n{var easingMultiplier=RG.Effects.getEasingMultiplier(frames,frame);for(var j=0,len=obj.original_data.length;j<len;++j){if(typeof obj.data[j]==='object'&&!RG.isNull(obj.data[j])){for(var k=0,len2=obj.data[j].length;k<len2;++k){if(obj.firstDraw||!opt.data){obj.data[j][k]=easingMultiplier*obj.original_data[j][k];}else if(opt.data&&opt.data.length===obj.original_data.length){var diff=opt.data[j][k]-obj.original_data[j][k];obj.data[j][k]=(easingMultiplier*diff)+obj.original_data[j][k];}}}else{if(obj.firstDraw||!opt.data){obj.data[j]=easingMultiplier*obj.original_data[j];}else if(opt.data&&opt.data.length===obj.original_data.length){var diff=opt.data[j]-obj.original_data[j];obj.data[j]=(easingMultiplier*diff)+obj.original_data[j];}}}\nRG.redrawCanvas(obj.canvas);if(frame<frames){frame+=1;RG.Effects.updateCanvas(iterator);}else{if(RG.isArray(opt.data)){var linear_data=RG.arrayLinearize(data);for(var i=0;i<linear_data.length;++i){if(!obj['$'+i]){obj['$'+i]={};}}}\nobj.data=data;obj.original_data=RG.arrayClone(data);if(labelsAbove){obj.set('labelsAbove',true);RG.redraw();}\ncallback(obj);}};iterator();return this;};this.wave=function()\n{var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||60;opt.startFrames=[];opt.counters=[];var framesperbar=opt.frames/3,frame=-1,callback=arguments[1]||function(){},original=RG.arrayClone(obj.data),labelsAbove=prop['chart.labels.above'];this.set('labelsAbove',false);for(var i=0,len=obj.data.length;i<len;i+=1){opt.startFrames[i]=((opt.frames/2)/(obj.data.length-1))*i;if(typeof obj.data[i]==='object'&&obj.data[i]){opt.counters[i]=[];for(var j=0;j<obj.data[i].length;j++){opt.counters[i][j]=0;}}else{opt.counters[i]=0;}}\nobj.draw();obj.Set('xmax',obj.scale2.max);RG.clear(obj.canvas);function iterator()\n{++frame;for(var i=0,len=obj.data.length;i<len;i+=1){if(frame>opt.startFrames[i]){if(typeof obj.data[i]==='number'){obj.data[i]=ma.min(ma.abs(original[i]),ma.abs(original[i]*((opt.counters[i]++)/framesperbar)));if(original[i]<0){obj.data[i]*=-1;}}else if(!RG.isNull(obj.data[i])){for(var j=0,len2=obj.data[i].length;j<len2;j+=1){obj.data[i][j]=ma.min(ma.abs(original[i][j]),ma.abs(original[i][j]*((opt.counters[i][j]++)/framesperbar)));if(original[i][j]<0){obj.data[i][j]*=-1;}}}}else{obj.data[i]=typeof obj.data[i]==='object'&&obj.data[i]?RG.arrayPad([],obj.data[i].length,0):(RG.isNull(obj.data[i])?null:0);}}\nif(frame>=opt.frames){if(labelsAbove){obj.set('labelsAbove',true);RG.redrawCanvas(obj.canvas);}\ncallback(obj);}else{RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iterator);}}\niterator();return this;};this.isAdjustable=function(shape)\n{if(RG.isNull(prop['chart.adjustable.only'])){return true;}\nif(RG.isArray(prop['chart.adjustable.only'])&&prop['chart.adjustable.only'][shape.index]){return true;}\nreturn false;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.hprogress.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.HProgress=function(conf)\n{if(typeof conf==='object'&&typeof conf.value!=='undefined'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),min=conf.min,max=conf.max,value=conf.value,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),min=arguments[1],max=arguments[2],value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.min=RGraph.stringsToNumbers(min);this.max=RGraph.stringsToNumbers(max);this.value=RGraph.stringsToNumbers(value);this.type='hprogress';this.coords=[];this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.colors':['Gradient(white:#0c0)','Gradient(white:red)','Gradient(white:green)','yellow','pink','cyan','black','white','gray'],'chart.strokestyle.inner':'#999','chart.strokestyle.outer':'#999','chart.tickmarks':true,'chart.tickmarks.color':'#999','chart.tickmarks.inner':false,'chart.tickmarks.zerostart':true,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.numticks':10,'chart.numticks.inner':50,'chart.background.color':'Gradient(#ccc:#eee:#efefef)','chart.shadow':false,'chart.shadow.color':'rgba(0,0,0,0.5)','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.title':'','chart.title.background':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.arrows':false,'chart.margin':0,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.labels.specific':null,'chart.labels.count':10,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.adjustable':false,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.key':null,'chart.key.background':'white','chart.key.position':'gutter','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.color.shape':'square','chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.labels.position':'bottom','chart.events.mousemove':null,'chart.events.click':null,'chart.border.inner':true,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[HPROGRESS] No canvas support');return;}\nvar linear_data=RGraph.array_linearize(value);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.strokestyle'){this.Set('chart.strokestyle.inner',value);this.Set('chart.strokestyle.outer',value);return;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.width=ca.width-this.gutterLeft-this.gutterRight;this.height=ca.height-this.gutterTop-this.gutterBottom;this.coords=[];this.coordsText=[];this.drawbar();this.DrawTickMarks();this.DrawLabels();this.DrawTitle();if(prop['chart.bevel']){this.DrawBevel();}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawbar=this.Drawbar=function()\n{this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});if(prop['chart.shadow']){RG.SetShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.fillStyle=prop['chart.background.color'];co.strokeStyle=prop['chart.strokestyle.outer'];co.strokeRect(this.gutterLeft,this.gutterTop,this.width,this.height);co.fillRect(this.gutterLeft,this.gutterTop,this.width,this.height);RG.noShadow(this);co.fillStyle=prop['chart.colors'][0];co.strokeStyle=prop['chart.strokestyle.outer'];var margin=prop['chart.margin'];var barWidth=ma.min(this.width,((RG.array_sum(this.value)-this.min)/(this.max-this.min))*this.width);if(prop['chart.tickmarks.inner']){var spacing=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numticks.inner'];co.lineWidth=1;co.strokeStyle=prop['chart.strokestyle.outer'];co.beginPath();for(var x=this.gutterLeft;x<ca.width-this.gutterRight;x+=spacing){co.moveTo(Math.round(x),this.gutterTop);co.lineTo(Math.round(x),this.gutterTop+2);co.moveTo(Math.round(x),ca.height-this.gutterBottom);co.lineTo(Math.round(x),ca.height-this.gutterBottom-2);}\nco.stroke();}\nif(typeof this.value==='number'){if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft,y:this.gutterTop+margin,width:barWidth,height:this.height-margin-margin,stroke:prop['chart.strokestyle.inner']});}\nthis.drawCurvedBar({x:this.gutterLeft,y:this.gutterTop+margin,width:barWidth,height:this.height-margin-margin,fill:prop['chart.colors'][0]});this.coords.push([this.gutterLeft,this.gutterTop+margin,barWidth,this.height-margin-margin]);}else if(typeof this.value==='object'){co.beginPath();var startPoint=this.gutterLeft;for(var i=0,len=this.value.length;i<len;++i){var segmentLength=(this.value[i]/RG.arraySum(this.value))*barWidth;if(prop['chart.border.inner']){this.drawCurvedBar({x:startPoint,y:this.gutterTop+margin,width:segmentLength,height:this.height-margin-margin,fill:prop['chart.colors'][i],stroke:prop['chart.strokestyle.inner']});}\nthis.drawCurvedBar({x:startPoint,y:this.gutterTop+margin,width:segmentLength,height:this.height-margin-margin,fill:prop['chart.colors'][i]});this.coords.push([startPoint,this.gutterTop+margin,segmentLength,this.height-margin-margin]);startPoint+=segmentLength;}}\nif(prop['chart.arrows']){var x=this.gutterLeft+barWidth;var y=this.gutterTop;co.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';co.beginPath();co.moveTo(x,y-3);co.lineTo(x+2,y-7);co.lineTo(x-2,y-7);co.closePath();co.stroke();co.fill();co.beginPath();co.moveTo(x,y+this.height+4);co.lineTo(x+2,y+this.height+9);co.lineTo(x-2,y+this.height+9);co.closePath();co.stroke();co.fill()}\nif(prop['chart.label.inner']){co.fillStyle='black';RG.Text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size']+2,'x':this.gutterLeft+barWidth+5,'y':this.gutterTop+(this.height/2),'text':String(prop['chart.units.pre']+this.value+prop['chart.units.post']),'valign':'bottom','halign':'left','bounding':true,'boundingFill':'white','tag':'label.inner'});}\npa2(co,'b');};this.drawTickMarks=this.DrawTickMarks=function()\n{co.strokeStyle=prop['chart.tickmarks.color'];if(prop['chart.tickmarks']){co.beginPath();this.tickInterval=this.width/prop['chart.numticks'];var start=prop['chart.tickmarks.zerostart']?0:this.tickInterval;if(prop['chart.labels.position']=='top'){for(var i=this.gutterLeft+start;i<=(this.width+this.gutterLeft+0.1);i+=this.tickInterval){co.moveTo(Math.round(i),this.gutterTop);co.lineTo(Math.round(i),this.gutterTop-4);}}else{for(var i=this.gutterLeft+start;i<=(this.width+this.gutterLeft+0.1);i+=this.tickInterval){co.moveTo(Math.round(i),this.gutterTop+this.height);co.lineTo(Math.round(i),this.gutterTop+this.height+4);}}\nco.stroke();}};this.drawLabels=this.DrawLabels=function()\n{if(!RG.is_null(prop['chart.labels.specific'])){return this.DrawSpecificLabels();}\nco.fillStyle=prop['chart.text.color'];var xPoints=[],yPoints=[],font=prop['chart.text.font'],size=prop['chart.text.size'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety'];for(i=0,len=this.scale2.labels.length;i<len;i++){if(prop['chart.labels.position']=='top'){var x=this.width*(i/this.scale2.labels.length)+this.gutterLeft+(this.width/this.scale2.labels.length);var y=this.gutterTop-6;var valign='bottom';}else{var x=this.width*(i/this.scale2.labels.length)+this.gutterLeft+(this.width/this.scale2.labels.length);var y=this.height+this.gutterTop+4;var valign='top';}\nRG.text2(this,{'font':font,'size':size,'x':x+offsetx,'y':y+offsety,'text':this.scale2.labels[i],'valign':valign,'halign':'center','tag':'scale'});}\nif(prop['chart.tickmarks.zerostart']){if(prop['chart.labels.position']=='top'){RG.text2(this,{'font':font,'size':size,'x':this.gutterLeft+offsetx,'y':this.gutterTop-6+offsety,'text':prop['chart.units.pre']+Number(this.min).toFixed(this.min>0?prop['chart.scale.decimals']:0)+prop['chart.units.post'],'valign':'bottom','halign':'center','tag':'scale'});}else{RG.text2(this,{'font':font,'size':size,'x':this.gutterLeft+offsetx,'y':ca.height-this.gutterBottom+5+offsety,'text':prop['chart.units.pre']+Number(this.min).toFixed(this.min>0?prop['chart.scale.decimals']:0)+prop['chart.units.post'],'valign':'top','halign':'center','tag':'scale'});}}};this.getShape=this.getBar=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];for(var i=0,len=this.coords.length;i<len;i++){var x=this.coords[i][0],y=this.coords[i][1],w=this.coords[i][2],h=this.coords[i][3],idx=i;co.beginPath();this.drawCurvedBar({x:x,y:y,height:h,width:w});if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],idx);return{0:this,1:x,2:y,3:w,4:h,5:idx,'object':this,'x':x,'y':y,'width':w,'height':h,'index':idx,'tooltip':tooltip}}}};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e);var value=(mouseXY[0]-this.gutterLeft)/this.width;value*=this.max-this.min;value+=this.min;if(mouseXY[0]<this.gutterLeft){value=this.min;}\nif(mouseXY[0]>(ca.width-this.gutterRight)){value=this.max}\nreturn value;};this.highlight=this.Highlight=function(shape)\n{var last=shape.index===this.coords.length-1;if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{this.drawCurvedBar({x:shape.x,y:shape.y,width:shape.width,height:shape.height,stroke:prop['chart.highlight.stroke'],fill:prop['chart.highlight.fill']});}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>this.gutterTop&&mouseXY[1]<(ca.height-this.gutterBottom)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RG.getMouseXY(e);var value=this.getValue(e);if(typeof(value)=='number'){this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(ca);RG.fireCustomEvent(this,'onadjust');}}};this.drawSpecificLabels=this.DrawSpecificLabels=function()\n{var labels=prop['chart.labels.specific'];if(labels){var font=prop['chart.text.font'],size=prop['chart.text.size'],valign=(prop['chart.labels.position']=='top'?'bottom':'top'),step=this.width/(labels.length-1),offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety']\nco.beginPath();co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;++i){RG.Text2(this,{font:font,size:size,x:this.gutterLeft+(step*i)+offsetx,y:prop['chart.labels.position']=='top'?this.gutterTop-7+offsety:ca.height-this.gutterBottom+7+offsety,text:labels[i],valign:valign,halign:'center',tag:'labels.specific'});}\nco.fill();}};this.getXCoord=function(value)\n{var min=this.min;if(value<min||value>this.max){return null;}\nvar barWidth=ca.width-this.gutterLeft-this.gutterRight;var coord=((value-min)/(this.max-min))*barWidth;coord=this.gutterLeft+coord;return coord;};this.overChartArea=function(e)\n{var mouseXY=RGraph.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.gutterLeft&&mouseX<=(ca.width-this.gutterRight)&&mouseY>=this.gutterTop&&mouseY<=(ca.height-this.gutterBottom)){return true;}\nreturn false;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.tickmarks.color']=RG.array_clone(prop['chart.tickmarks.color']);this.original_colors['chart.strokestyle.inner']=RG.array_clone(prop['chart.strokestyle.inner']);this.original_colors['chart.strokestyle.outer']=RG.array_clone(prop['chart.strokestyle.outer']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.color']=RG.array_clone(prop['chart.highlight.color']);}\nvar colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}\nprop['chart.tickmarks.color']=this.parseSingleColorForGradient(prop['chart.tickmarks.color']);prop['chart.strokestyle.inner']=this.parseSingleColorForGradient(prop['chart.strokestyle.inner']);prop['chart.strokestyle.outer']=this.parseSingleColorForGradient(prop['chart.strokestyle.outer']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.drawBevel=this.DrawBevel=function()\n{for(var i=0,len=0;i<this.coords.length;++i)len+=this.coords[i][2];co.save();co.beginPath();co.rect(this.coords[0][0],this.coords[0][1],len,this.coords[0][3]);co.clip();co.save();co.beginPath();this.drawCurvedBar({x:this.coords[0][0],y:this.coords[0][1],width:len,height:this.coords[0][3]});co.clip();co.beginPath();co.shadowColor='black';co.shadowOffsetX=0;co.shadowOffsetY=0;co.shadowBlur=15;co.lineWidth=2;this.drawCurvedBar({x:this.coords[0][0]-51,y:this.coords[0][1]-1,width:len+52,height:this.coords[0][3]+2});co.stroke();co.restore();co.restore();};this.drawTitle=this.DrawTitle=function()\n{if(prop['chart.title'].length){var x=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;var text=prop['chart.title'];var size=prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2;var font=prop['chart.title.font']?prop['chart.title.font']:prop['chart.text.font'];if(prop['chart.labels.position']=='top'){y=ca.height-this.gutterBottom+5;x=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;valign='top';}else{x=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;y=this.gutterTop-5;valign='bottom';}\nRG.Text2(this,{'font':font,'size':size,'x':typeof(prop['chart.title.x'])=='number'?prop['chart.title.x']:x,'y':typeof(prop['chart.title.y'])=='number'?prop['chart.title.y']:y,'text':text,'valign':prop['chart.title.valign']?prop['chart.title.valign']:valign,'halign':prop['chart.title.halign']?prop['chart.title.halign']:'center','bold':prop['chart.title.bold'],'bounding':prop['chart.title.background']?true:false,'boundingFill':prop['chart.title.background'],'tag':'title'});}};this.interactiveKeyHighlight=function(index)\n{var coords=this.coords[index];co.beginPath();co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.lineWidth=2;co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.rect(coords[0],coords[1],coords[2],coords[3]);co.fill();co.stroke();co.lineWidth=1;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.drawCurvedBar=function(opt)\n{pa2(co,'b r % % % %',opt.x,opt.y,opt.width,opt.height);if(opt.stroke){co.strokeStyle=opt.stroke;co.stroke();}\nif(opt.fill){co.fillStyle=opt.fill;co.fill();}}\nthis.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this;var canvas=obj.canvas;var context=obj.context;var initial_value=obj.currentValue;var opt=arguments[0]||{};var numFrames=opt.frames||30;var frame=0\nvar callback=arguments[1]||function(){};if(typeof obj.value==='object'){if(RG.is_null(obj.currentValue)){obj.currentValue=[];for(var i=0,len=obj.value.length;i<len;++i){obj.currentValue[i]=0;}}\nvar diff=[];var increment=[];for(var i=0,len=obj.value.length;i<len;++i){diff[i]=obj.value[i]-Number(obj.currentValue[i]);increment[i]=diff[i]/numFrames;}\nif(initial_value==null){initial_value=[];for(var i=0,len=obj.value.length;i<len;++i){initial_value[i]=0;}}}else{var diff=obj.value-Number(obj.currentValue);var increment=diff/numFrames;}\nfunction iterator()\n{frame++;if(frame<=numFrames){if(typeof obj.value=='object'){obj.value=[];for(var i=0,len=initial_value.length;i<len;++i){obj.value[i]=initial_value[i]+(increment[i]*frame);}}else{obj.value=initial_value+(increment*frame);}\nRGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);RGraph.Effects.updateCanvas(iterator);}else{callback();}}\niterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.line.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Line=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id;var canvas=document.getElementById(id);var data=conf.data;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var data=arguments[1];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.type='line';this.max=0;this.coords=[];this.coords2=[];this.coords.key=[];this.coordsText=[];this.coordsSpline=[];this.coordsAxes={xaxis:[],yaxis:[]};this.hasnegativevalues=false;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':1,'chart.background.grid.width':1,'chart.background.grid.hsize':25,'chart.background.grid.vsize':25,'chart.background.grid.color':'#ddd','chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':null,'chart.background.grid.dashed':false,'chart.background.grid.dotted':false,'chart.background.hbars':null,'chart.background.image':null,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.labels':null,'chart.labels.bold':false,'chart.labels.color':null,'chart.labels.ingraph':null,'chart.labels.above':false,'chart.labels.above.size':8,'chart.labels.above.decimals':null,'chart.labels.above.color':null,'chart.labels.above.background':'white','chart.labels.above.font':null,'chart.labels.above.border':true,'chart.labels.above.offsety':5,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.labels.above.specific':null,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.xtickgap':20,'chart.smallxticks':3,'chart.largexticks':5,'chart.ytickgap':20,'chart.smallyticks':3,'chart.largeyticks':5,'chart.numyticks':10,'chart.linewidth':2.01,'chart.colors':['red','#0f0','#00f','#f0f','#ff0','#0ff','green','pink','blue','black'],'chart.hmargin':0,'chart.tickmarks.dot.stroke':'white','chart.tickmarks.dot.fill':null,'chart.tickmarks.dot.linewidth':3,'chart.tickmarks':'endcircle','chart.tickmarks.linewidth':null,'chart.tickmarks.image':null,'chart.tickmarks.image.halign':'center','chart.tickmarks.image.valign':'center','chart.tickmarks.image.offsetx':0,'chart.tickmarks.image.offsety':0,'chart.ticksize':3,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':30,'chart.tickdirection':-1,'chart.yaxispoints':5,'chart.fillstyle':null,'chart.xaxispos':'bottom','chart.xaxispos.value':0,'chart.yaxispos':'left','chart.xticks':null,'chart.text.size':12,'chart.text.angle':0,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.ymin':0,'chart.ymax':null,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.color':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':null,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.shadow':true,'chart.shadow.offsetx':2,'chart.shadow.offsety':2,'chart.shadow.blur':3,'chart.shadow.color':'rgba(128,128,128,0.5)','chart.tooltips':null,'chart.tooltips.hotspot.xonly':false,'chart.tooltips.hotspot.size':5,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onmousemove','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.highlight.style':null,'chart.highlight.stroke':'gray','chart.highlight.fill':'white','chart.stepped':false,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':null,'chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'rgba(255,0,0,0.3)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.contextmenu':null,'chart.ylabels':true,'chart.ylabels.count':5,'chart.ylabels.inside':false,'chart.ylabels.offsetx':0,'chart.ylabels.offsety':0,'chart.scale.invert':false,'chart.xlabels.inside':false,'chart.xlabels.inside.color':'rgba(255,255,255,0.5)','chart.noaxes':false,'chart.noyaxis':false,'chart.noxaxis':false,'chart.noendxtick':false,'chart.noendytick':false,'chart.units.post':'','chart.units.pre':'','chart.scale.zerostart':true,'chart.scale.decimals':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.crosshairs':false,'chart.crosshairs.color':'#333','chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.annotatable':false,'chart.annotate.color':'black','chart.axesontop':false,'chart.filled':false,'chart.filled.range':false,'chart.filled.range.threshold':null,'chart.filled.range.threshold.colors':['red','green'],'chart.filled.accumulative':true,'chart.variant':null,'chart.axis.color':'black','chart.axis.linewidth':1,'chart.numxticks':(data&&typeof(data[0])=='number'?data.length-1:(typeof data[0]==='object'&&data[0]&&typeof data[0][0]==='number'?data[0].length-1:20)),'chart.numyticks':10,'chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.backdrop':false,'chart.backdrop.size':30,'chart.backdrop.alpha':0.2,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.adjustable':false,'chart.adjustable.only':null,'chart.noredraw':false,'chart.outofbounds':false,'chart.outofbounds.clip':false,'chart.chromefix':true,'chart.animation.factor':1,'chart.animation.unfold.x':false,'chart.animation.unfold.y':true,'chart.animation.unfold.initial':2,'chart.animation.trace.clip':1,'chart.animation.trace.center':false,'chart.curvy':false,'chart.line.visible':[],'chart.events.click':null,'chart.events.mousemove':null,'chart.errorbars':false,'chart.errorbars.color':'black','chart.errorbars.capped':true,'chart.errorbars.capped.width':12,'chart.errorbars.linewidth':1,'chart.combinedchart.effect':null,'chart.combinedchart.effect.options':null,'chart.combinedchart.effect.callback':null,'chart.clearto':'rgba(0,0,0,0)','chart.dotted':false,'chart.dashed':false}\nfor(var i=1;i<arguments.length;++i){if(typeof(arguments[i])=='null'||!arguments[i]){arguments[i]=[];}}\nthis.original_data=[];if(typeof conf==='object'&&conf.data){if(typeof conf.data[0]==='number'||RGraph.isNull(conf.data[0])){this.original_data[0]=RGraph.arrayClone(conf.data);}else{for(var i=0;i<conf.data.length;++i){this.original_data[i]=RGraph.arrayClone(conf.data[i]);}}}else{for(var i=1;i<arguments.length;++i){if(arguments[1]&&typeof(arguments[1])=='object'&&arguments[1][0]&&typeof(arguments[1][0])=='object'&&arguments[1][0].length){var tmp=[];for(var i=0;i<arguments[1].length;++i){tmp[i]=RGraph.array_clone(arguments[1][i]);}\nfor(var j=0;j<tmp.length;++j){this.original_data[j]=RGraph.array_clone(tmp[j]);}}else{this.original_data[i-1]=RGraph.array_clone(arguments[i]);}}}\nif(!this.canvas){alert('[LINE] Fatal error: no canvas support');return;}\nfor(var i=0;i<this.original_data.length;++i){for(var j=0;j<this.original_data[i].length;++j){if(typeof this.original_data[i][j]==='string'){this.original_data[i][j]=parseFloat(this.original_data[i][j]);}}}\nthis.data_arr=RGraph.arrayLinearize(this.original_data);for(var i=0;i<this.data_arr.length;++i){this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.tooltips'&&typeof value=='object'&&value){var tooltips=[];for(var i=1;i<arguments.length;i++){if(typeof(arguments[i])=='object'&&arguments[i][0]){for(var j=0;j<arguments[i].length;j++){tooltips.push(arguments[i][j]);}}else if(typeof(arguments[i])=='function'){tooltips=arguments[i];}else{tooltips.push(arguments[i]);}}\nvalue=tooltips;}\nif(name=='chart.linewidth'&&navigator.userAgent.match(/Chrome/)){if(value==1){value=1.01;}else if(RGraph.is_array(value)){for(var i=0;i<value.length;++i){if(typeof(value[i])=='number'&&value[i]==1){value[i]=1.01;}}}}\nif(name=='chart.xaxispos'){if(value!='bottom'&&value!='center'&&value!='top'){alert('[LINE] ('+this.id+') chart.xaxispos should be top, center or bottom. Tried to set it to: '+value+' Changing it to center');value='center';}}\nif(name=='chart.xticks'){name='chart.numxticks';}\nif(name=='chart.spline'){name='chart.curvy';}\nif(name=='chart.ylabels.invert'){name='chart.scale.invert';}\nthis.properties[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.spline'){name='chart.curvy';}\nreturn prop[name];};this.draw=this.Draw=function()\n{if(typeof(prop['chart.background.image'])=='string'){RG.DrawBackgroundImage(this);}\nRG.FireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.data=RG.array_clone(this.original_data);this.max=0;if(prop['chart.filled']&&!prop['chart.filled.range']&&this.data.length>1&&prop['chart.filled.accumulative']){var accumulation=[];for(var set=0;set<this.data.length;++set){for(var point=0;point<this.data[set].length;++point){this.data[set][point]=Number(accumulation[point]?accumulation[point]:0)+this.data[set][point];accumulation[point]=this.data[set][point];}}}\nif(prop['chart.ymax']){this.max=prop['chart.ymax'];this.min=prop['chart.ymin']?prop['chart.ymin']:0;this.scale2=RG.getScale2(this,{'max':this.max,'min':prop['chart.ymin'],'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max?this.scale2.max:0;if(!prop['chart.outofbounds']){for(dataset=0;dataset<this.data.length;++dataset){if(RGraph.isArray(this.data[dataset])){for(var datapoint=0;datapoint<this.data[dataset].length;datapoint++){this.hasnegativevalues=(this.data[dataset][datapoint]<0)||this.hasnegativevalues;}}}}}else{this.min=prop['chart.ymin']?prop['chart.ymin']:0;for(dataset=0;dataset<this.data.length;++dataset){for(var datapoint=0;datapoint<this.data[dataset].length;datapoint++){this.max=Math.max(this.max,this.data[dataset][datapoint]?Math.abs(parseFloat(this.data[dataset][datapoint])):0);if(!prop['chart.outofbounds']){this.hasnegativevalues=(this.data[dataset][datapoint]<0)||this.hasnegativevalues;}}}\nthis.scale2=RG.getScale2(this,{'max':this.max,'min':prop['chart.ymin'],'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max?this.scale2.max:0;}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nthis.coords=[];this.coordsText=[];this.grapharea=ca.height-this.gutterTop-this.gutterBottom;this.halfgrapharea=this.grapharea/2;this.halfTextHeight=prop['chart.text.size']/2;if(prop['chart.variant']=='3d'){RG.Draw3DAxes(this);}\nRG.background.Draw(this);if(prop['chart.background.hbars']&&prop['chart.background.hbars'].length>0){RG.DrawBars(this);}\nif(prop['chart.axesontop']==false){this.DrawAxes();}\nco.save()\nco.beginPath();if(prop['chart.animation.trace.center']){co.rect((ca.width/2)*(1-prop['chart.animation.trace.clip']),0,ca.width*prop['chart.animation.trace.clip'],ca.height);}else{co.rect(0,0,ca.width*prop['chart.animation.trace.clip'],ca.height);}\nco.clip();for(var i=0,j=0,len=this.data.length;i<len;i++,j++){co.beginPath();if(!prop['chart.filled']){this.SetShadow(i);}\nif(prop['chart.fillstyle']){if(typeof(prop['chart.fillstyle'])=='object'&&prop['chart.fillstyle'][j]){var fill=prop['chart.fillstyle'][j];}else if(typeof(prop['chart.fillstyle'])=='object'&&prop['chart.fillstyle'].toString().indexOf('Gradient')>0){var fill=prop['chart.fillstyle'];}else if(typeof(prop['chart.fillstyle'])=='string'){var fill=prop['chart.fillstyle'];}}else if(prop['chart.filled']){var fill=prop['chart.colors'][j];}else{var fill=null;}\nif(prop['chart.tickmarks']&&typeof(prop['chart.tickmarks'])=='object'){var tickmarks=prop['chart.tickmarks'][i];}else if(prop['chart.tickmarks']&&typeof(prop['chart.tickmarks'])=='string'){var tickmarks=prop['chart.tickmarks'];}else if(prop['chart.tickmarks']&&typeof(prop['chart.tickmarks'])=='function'){var tickmarks=prop['chart.tickmarks'];}else{var tickmarks=null;}\nif(prop['chart.outofbounds.clip']){pa2(co,'sa b r % % % % cl b',0,this.gutterTop,ca.width,ca.height-this.gutterTop-this.gutterBottom);}\nthis.drawLine(this.data[i],prop['chart.colors'][j],fill,this.getLineWidth(j),tickmarks,i);if(prop['chart.outofbounds.clip']){co.restore();}\nco.stroke();}\nif(prop['chart.outofbounds.clip']){pa2(co,'sa b r % % % % cl b',0,this.gutterTop,ca.width,ca.height-this.gutterTop-this.gutterBottom);}\nif(prop['chart.filled']&&prop['chart.filled.accumulative']&&!prop['chart.curvy']){for(var i=0;i<this.coords2.length;++i){co.beginPath();co.lineWidth=this.GetLineWidth(i);co.strokeStyle=!this.hidden(i)?prop['chart.colors'][i]:'rgba(0,0,0,0)';for(var j=0,len=this.coords2[i].length;j<len;++j){if(j==0||this.coords2[i][j][1]==null||(this.coords2[i][j-1]&&this.coords2[i][j-1][1]==null)){co.moveTo(this.coords2[i][j][0],this.coords2[i][j][1]);}else{if(prop['chart.stepped']){co.lineTo(this.coords2[i][j][0],this.coords2[i][j-1][1]);}\nco.lineTo(this.coords2[i][j][0],this.coords2[i][j][1]);}}\nco.stroke();}\nif(prop['chart.tickmarks']){co.beginPath();co.fillStyle='white';for(var i=0,len=this.coords2.length;i<len;++i){co.beginPath();co.strokeStyle=prop['chart.colors'][i];for(var j=0;j<this.coords2[i].length;++j){if(typeof(this.coords2[i][j])=='object'&&typeof(this.coords2[i][j][0])=='number'&&typeof(this.coords2[i][j][1])=='number'){var tickmarks=typeof(prop['chart.tickmarks'])=='object'?prop['chart.tickmarks'][i]:prop['chart.tickmarks'];this.DrawTick(this.coords2[i],this.coords2[i][j][0],this.coords2[i][j][1],co.strokeStyle,false,j==0?0:this.coords2[i][j-1][0],j==0?0:this.coords2[i][j-1][1],tickmarks,j,i);}}}\nco.stroke();co.fill();}}else if(prop['chart.filled']&&prop['chart.filled.accumulative']&&prop['chart.curvy']){for(var i=0;i<this.coordsSpline.length;i+=1){co.beginPath();co.strokeStyle=prop['chart.colors'][i];co.lineWidth=this.GetLineWidth(i);for(var j=0,len=this.coordsSpline[i].length;j<len;j+=1){var point=this.coordsSpline[i][j];j==0?co.moveTo(point[0],point[1]):co.lineTo(point[0],point[1]);}\nco.stroke();}\nfor(var i=0,len=this.coords2.length;i<len;i+=1){for(var j=0,len2=this.coords2[i].length;j<len2;++j){if(typeof(this.coords2[i][j])=='object'&&typeof(this.coords2[i][j][0])=='number'&&typeof(this.coords2[i][j][1])=='number'){var tickmarks=typeof prop['chart.tickmarks']=='object'&&!RGraph.is_null(prop['chart.tickmarks'])?prop['chart.tickmarks'][i]:prop['chart.tickmarks'];co.strokeStyle=prop['chart.colors'][i];this.DrawTick(this.coords2[i],this.coords2[i][j][0],this.coords2[i][j][1],prop['chart.colors'][i],false,j==0?0:this.coords2[i][j-1][0],j==0?0:this.coords2[i][j-1][1],tickmarks,j,i);}}}}\nif(prop['chart.outofbounds.clip']){co.restore();}\nco.restore();co.beginPath();if(prop['chart.axesontop']){this.DrawAxes();}\nthis.DrawLabels();this.DrawRange();if(prop['chart.key']&&prop['chart.key'].length&&RG.DrawKey){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.labels.above']){this.drawAboveLabels();}\nRG.DrawInGraphLabels(this);if(prop['chart.filled']&&prop['chart.filled.range']&&this.data.length==2){co.beginPath();var len=this.coords.length/2;co.lineWidth=prop['chart.linewidth'];co.strokeStyle=this.hidden(0)?'rgba(0,0,0,0)':prop['chart.colors'][0];for(var i=0;i<len;++i){if(!RG.isNull(this.coords[i][1])){if(i==0){co.moveTo(this.coords[i][0],this.coords[i][1]);}else{co.lineTo(this.coords[i][0],this.coords[i][1]);}}}\nco.stroke();co.beginPath();if(prop['chart.colors'][1]){co.strokeStyle=this.hidden(1)?'rgba(0,0,0,0)':prop['chart.colors'][1];}\nfor(var i=this.coords.length-1;i>=len;--i){if(!RG.is_null(this.coords[i][1])){if(i==(this.coords.length-1)){co.moveTo(this.coords[i][0],this.coords[i][1]);}else{co.lineTo(this.coords[i][0],this.coords[i][1]);}}}\nco.stroke();}else if(prop['chart.filled']&&prop['chart.filled.range']){alert('[LINE] You must have only two sets of data for a filled range chart');}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawAxes=this.DrawAxes=function()\n{if(prop['chart.noaxes']){return;}\nRG.noShadow(this);co.lineWidth=prop['chart.axis.linewidth']+0.001;co.lineCap='square';co.lineJoin='miter';co.strokeStyle=prop['chart.axis.color'];coords={xaxis:{},yaxis:{}};co.beginPath();if(prop['chart.noxaxis']==false){if(prop['chart.xaxispos']=='center'){coords.xaxis=[this.gutterLeft,ma.round((this.grapharea/2)+this.gutterTop),ca.width-this.gutterRight,ma.round((this.grapharea/2)+this.gutterTop)];}else if(prop['chart.xaxispos']==='top'){coords.xaxis=[this.gutterLeft,this.gutterTop,ca.width-this.gutterRight,this.gutterTop];}else{var y=ma.round(this.getYCoord(prop['chart.ymin']!=0?prop['chart.ymin']:0));if(prop['chart.scale.invert']&&prop['chart.ymin']===0){y=this.getYCoord(this.scale2.max);}else if(prop['chart.scale.invert']||prop['chart.ymin']<0){y=this.getYCoord(0);}\ncoords.xaxis=[this.gutterLeft,y,ca.width-this.gutterRight,y];}\nco.moveTo(coords.xaxis[0],coords.xaxis[1]);co.lineTo(coords.xaxis[2],coords.xaxis[3]);this.coordsAxes=coords;}\nif(prop['chart.noyaxis']==false){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,this.gutterTop);co.lineTo(this.gutterLeft,ca.height-this.gutterBottom);}else{co.moveTo(ca.width-this.gutterRight,this.gutterTop);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);}}\nif(prop['chart.noxaxis']==false&&prop['chart.numxticks']>0){var xTickInterval=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];if(!xTickInterval||xTickInterval<=0){xTickInterval=(ca.width-this.gutterLeft-this.gutterRight)/(prop['chart.labels']&&prop['chart.labels'].length?prop['chart.labels'].length-1:10);}\nfor(x=this.gutterLeft+(prop['chart.yaxispos']=='left'?xTickInterval:0);x<=(ca.width-this.gutterRight+1);x+=xTickInterval){if(prop['chart.yaxispos']=='right'&&x>=(ca.width-this.gutterRight-1)){break;}\nif(prop['chart.noendxtick']){if(prop['chart.yaxispos']=='left'&&x>=(ca.width-this.gutterRight-1)){break;}else if(prop['chart.yaxispos']=='right'&&x==this.gutterLeft){continue;}}\nvar yStart=prop['chart.xaxispos']==='center'?(this.gutterTop+(this.grapharea/2))-3:ca.height-this.gutterBottom;var yEnd=prop['chart.xaxispos']==='center'?yStart+6:ca.height-this.gutterBottom-(x%60==0?prop['chart.largexticks']*prop['chart.tickdirection']:prop['chart.smallxticks']*prop['chart.tickdirection']);if(prop['chart.ymin']>=0&&prop['chart.xaxispos']==='bottom'){var yStart=this.getYCoord(prop['chart.ymin'])-(prop['chart.ymin']>=0?0:3),yEnd=this.getYCoord(prop['chart.ymin'])+3;if(prop['chart.scale.invert']){yStart=ca.height-prop['chart.gutter.bottom'];yEnd=yStart+3;}}else if(prop['chart.xaxispos']=='center'){var yStart=Math.round((this.gutterTop+(this.grapharea/2)))-3,yEnd=yStart+6;}else if(prop['chart.xaxispos']=='bottom'){var yStart=this.getYCoord(0)-(prop['chart.ymin']!==0?3:0),yEnd=this.getYCoord(0)-(x%60==0?prop['chart.largexticks']*prop['chart.tickdirection']:prop['chart.smallxticks']*prop['chart.tickdirection']);yEnd+=0;}else if(prop['chart.xaxispos']=='top'){yStart=this.gutterTop-3;yEnd=this.gutterTop;}\nco.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}}else if(prop['chart.noyaxis']==false&&prop['chart.numyticks']>0){if(!prop['chart.noendytick']){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,Math.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft-prop['chart.smallyticks'],Math.round(ca.height-this.gutterBottom));}else{co.moveTo(ca.width-this.gutterRight,Math.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight+prop['chart.smallyticks'],Math.round(ca.height-this.gutterBottom));}}}\nvar numyticks=prop['chart.numyticks'];if(prop['chart.noyaxis']==false&&numyticks>0){var counter=0,adjustment=0;if(prop['chart.yaxispos']=='right'){adjustment=(ca.width-this.gutterLeft-this.gutterRight);}\nif(prop['chart.xaxispos']=='center'){var interval=(this.grapharea/numyticks);var lineto=(prop['chart.yaxispos']=='left'?this.gutterLeft:ca.width-this.gutterRight+prop['chart.smallyticks']);for(y=this.gutterTop;y<(this.grapharea/2)+this.gutterTop;y+=interval){if(y<(this.grapharea/2)+this.gutterTop){co.moveTo((prop['chart.yaxispos']=='left'?this.gutterLeft-prop['chart.smallyticks']:ca.width-this.gutterRight),Math.round(y));co.lineTo(lineto,Math.round(y));}}\nfor(y=this.gutterTop+(this.halfgrapharea)+interval;y<=this.grapharea+this.gutterTop;y+=interval){co.moveTo((prop['chart.yaxispos']=='left'?this.gutterLeft-prop['chart.smallyticks']:ca.width-this.gutterRight),Math.round(y));co.lineTo(lineto,Math.round(y));}}else if(prop['chart.xaxispos']=='top'){var interval=(this.grapharea/numyticks);var lineto=(prop['chart.yaxispos']=='left'?this.gutterLeft:ca.width-this.gutterRight+prop['chart.smallyticks']);for(y=this.gutterTop+interval;y<=this.grapharea+this.gutterBottom;y+=interval){co.moveTo((prop['chart.yaxispos']=='left'?this.gutterLeft-prop['chart.smallyticks']:ca.width-this.gutterRight),Math.round(y));co.lineTo(lineto,Math.round(y));}\nif(prop['chart.noxaxis']&&prop['chart.noendytick']==false){co.moveTo((prop['chart.yaxispos']=='left'?this.gutterLeft-prop['chart.smallyticks']:ca.width-this.gutterRight),this.gutterTop);co.lineTo(lineto,this.gutterTop);}}else{var lineto=(prop['chart.yaxispos']=='left'?this.gutterLeft-prop['chart.smallyticks']:ca.width-this.gutterRight+prop['chart.smallyticks']);for(y=this.gutterTop;y<(ca.height-this.gutterBottom)&&counter<numyticks;y+=((ca.height-this.gutterTop-this.gutterBottom)/numyticks)){if(ma.round(y)!==ma.round(this.coordsAxes.xaxis[1])){co.moveTo(this.gutterLeft+adjustment,ma.round(y));co.lineTo(lineto,ma.round(y));}\nvar counter=counter+1;}\nif(prop['chart.ymin']<0){co.moveTo((prop['chart.yaxispos']=='left'?this.gutterLeft:ca.width-this.gutterRight),ma.round(y));co.lineTo(lineto,ma.round(y));}}}else if(prop['chart.noxaxis']==false&&prop['chart.numxticks']>0){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,prop['chart.xaxispos']=='top'?this.gutterTop:ca.height-this.gutterBottom);co.lineTo(this.gutterLeft,prop['chart.xaxispos']=='top'?this.gutterTop-prop['chart.smallxticks']:ca.height-this.gutterBottom+prop['chart.smallxticks']);}else{co.moveTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom+prop['chart.smallxticks']);}}\nco.stroke();co.beginPath();};this.drawLabels=this.DrawLabels=function()\n{co.strokeStyle='black';co.fillStyle=prop['chart.text.color'];co.lineWidth=1;RG.NoShadow(this);var font=prop['chart.text.font'];var text_size=prop['chart.text.size'];var decimals=prop['chart.scale.decimals'];var context=co;var canvas=ca;var ymin=prop['chart.ymin'];if(prop['chart.ylabels']&&prop['chart.ylabels.specific']==null){var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var xpos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='left'?'right':'left';var numYLabels=this.scale2.labels.length;var bounding=false;var bgcolor=prop['chart.ylabels.inside']?prop['chart.ylabels.inside.color']:null;var offsetx=prop['chart.ylabels.offsetx'];var offsety=prop['chart.ylabels.offsety'];if(prop['chart.ylabels.inside']==true&&align=='left'){xpos-=10;align='right';bounding=true;}else if(prop['chart.ylabels.inside']==true&&align=='right'){xpos+=10;align='left';bounding=true;}\nif(prop['chart.xaxispos']=='center'){var half=this.grapharea/2;for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+half-(((i+1)/numYLabels)*half)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':this.scale2.labels[i],'tag':'scale'});}\nfor(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+half+(((i+1)/numYLabels)*half)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':'-'+this.scale2.labels[i],'tag':'scale'});}\nif(prop['chart.noxaxis']==true||ymin!=0||prop['chart.scale.zerostart']){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+half+offsety,'text':prop['chart.units.pre']+ymin.toFixed(ymin===0?0:decimals)+prop['chart.units.post'],'bounding':bounding,'boundingFill':bgcolor,'valign':'center','halign':align,'tag':'scale'});}}else if(prop['chart.xaxispos']=='top'){var half=this.grapharea/2;if(prop['chart.scale.invert']){for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+((i/this.scale2.labels.length)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':'-'+this.scale2.labels[this.scale2.labels.length-(i+1)],'tag':'scale'});}}else{for(var i=0;i<this.scale2.labels.length;++i){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+(((i+1)/numYLabels)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':'-'+this.scale2.labels[i],'tag':'scale'});}}\nif((prop['chart.ymin']!=0||prop['chart.noxaxis'])||prop['chart.scale.invert']||prop['chart.scale.zerostart']){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':prop['chart.scale.invert']?ca.height-this.gutterBottom+offsety:this.gutterTop+offsety,'text':(prop['chart.ymin']!=0?'-':'')+RG.numberFormat(this,prop['chart.ymin'].toFixed(ymin===0?0:decimals),units_pre,units_post),'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'tag':'scale'});}}else{if(prop['chart.scale.invert']){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':RG.numberFormat(this,this.min.toFixed(prop['chart.ymin']===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});for(var i=0,len=this.scale2.labels.length;i<len;++i){RG.Text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+(((i+1)/this.scale2.labels.length)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':this.scale2.labels[i],'tag':'scale'});}}else{for(var i=0,len=this.scale2.labels.length;i<len;++i){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':this.gutterTop+((i/this.scale2.labels.length)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'text':this.scale2.labels[this.scale2.labels.length-(i+1)],'tag':'scale'});}}\nif((prop['chart.ymin']!=0&&!prop['chart.scale.invert']||prop['chart.scale.zerostart'])||prop['chart.noxaxis']){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':prop['chart.scale.invert']?this.gutterTop+offsety:ca.height-this.gutterBottom+offsety,'text':RG.numberFormat(this,prop['chart.ymin'].toFixed(prop['chart.ymin']===0?0:prop['chart.scale.decimals']),units_pre,units_post),'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'tag':'scale'});}}\nif(prop['chart.noxaxis']==true&&prop['chart.ymin']==null&&prop['chart.xaxispos']!='center'&&prop['chart.noendytick']==false){RG.text2(this,{'font':font,'size':text_size,'x':xpos+offsetx,'y':prop['chart.xaxispos']=='top'?this.gutterTop+offsety:(ca.height-this.gutterBottom),'text':prop['chart.units.pre']+Number(0).toFixed(prop['chart.scale.decimals'])+prop['chart.units.post']+offsety,'valign':'center','halign':align,'bounding':bounding,'boundingFill':bgcolor,'tag':'scale'});}}else if(prop['chart.ylabels']&&typeof(prop['chart.ylabels.specific'])=='object'){var gap=this.grapharea/prop['chart.ylabels.specific'].length;var halign=prop['chart.yaxispos']=='left'?'right':'left';var bounding=false;var bgcolor=null;var ymin=prop['chart.ymin']!=null&&prop['chart.ymin'];if(prop['chart.yaxispos']=='left'){var x=this.gutterLeft-5;if(prop['chart.ylabels.inside']){x+=10;halign='left';bounding=true;bgcolor='rgba(255,255,255,0.5)';}}else if(prop['chart.yaxispos']=='right'){var x=ca.width-this.gutterRight+5;if(prop['chart.ylabels.inside']){x-=10;halign='right';bounding=true;bgcolor='rgba(255,255,255,0.5)';}}\nvar offsetx=prop['chart.ylabels.offsetx'];var offsety=prop['chart.ylabels.offsety'];if(prop['chart.xaxispos']=='center'){for(var i=0;i<prop['chart.ylabels.specific'].length;++i){var y=this.gutterTop+(this.grapharea/(((prop['chart.ylabels.specific'].length-1))*2)*i);if(ymin&&ymin>0){var y=((this.grapharea/2)/(prop['chart.ylabels.specific'].length-(ymin?1:0)))*i;y+=this.gutterTop;}\nRG.text2(this,{'font':font,'size':text_size,'x':x+offsetx,'y':y+offsety,'text':String(prop['chart.ylabels.specific'][i]),'valign':'center','halign':halign,'bounding':bounding,'boundingFill':bgcolor,'tag':'ylabels.specific'});}\nvar reversed_labels=RG.array_reverse(prop['chart.ylabels.specific']);for(var i=0;i<reversed_labels.length;++i){var y=(this.grapharea/2)+this.gutterTop+((this.grapharea/((reversed_labels.length-1)*2))*i);RG.text2(this,{'font':font,'size':text_size,'x':x+offsetx,'y':y+offsety,'text':i==0?'':String(reversed_labels[i]),'valign':'center','halign':halign,'bounding':bounding,'boundingFill':bgcolor,'tag':'ylabels.specific'});}}else if(prop['chart.xaxispos']=='top'){var reversed_labels=RG.array_reverse(prop['chart.ylabels.specific']);for(var i=0;i<reversed_labels.length;++i){var y=(this.grapharea/(reversed_labels.length-1))*i;y=y+this.gutterTop;RG.Text2(this,{'font':font,'size':text_size,'x':x+offsetx,'y':y+offsety,'text':String(reversed_labels[i]),'valign':'center','halign':halign,'bounding':bounding,'boundingFill':bgcolor,'tag':'ylabels.specific'});}}else{for(var i=0;i<prop['chart.ylabels.specific'].length;++i){var y=this.gutterTop+((this.grapharea/(prop['chart.ylabels.specific'].length-1))*i);RG.text2(this,{'font':font,'size':text_size,'x':x+offsetx,'y':y+offsety,'text':String(prop['chart.ylabels.specific'][i]),'valign':'center','halign':halign,'bounding':bounding,'boundingFill':bgcolor,'tag':'ylabels.specific'});}}}\nif(prop['chart.labels']&&prop['chart.labels'].length>0){var yOffset=5,bordered=false,bgcolor=null\nco.fillStyle=prop['chart.labels.color']||prop['chart.text.color'];var angle=0,valign='top',halign='center',bold=prop['chart.labels.bold']\nif(prop['chart.xlabels.inside']){yOffset=-5;bordered=true;bgcolor=prop['chart.xlabels.inside.color'];valign='bottom';}\nif(prop['chart.xaxispos']=='top'){valign='bottom';yOffset+=2;}\nif(typeof(prop['chart.text.angle'])=='number'&&prop['chart.text.angle']>0){angle=-1*prop['chart.text.angle'];valign='center';halign='right';yOffset=10;if(prop['chart.xaxispos']=='top'){yOffset=10;}}\nvar numLabels=prop['chart.labels'].length,offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety'];for(i=0;i<numLabels;++i){if(prop['chart.labels'][i]){var labelX=((ca.width-this.gutterLeft-this.gutterRight-(2*prop['chart.hmargin']))/(numLabels-1))*i;labelX+=this.gutterLeft+prop['chart.hmargin'];if(this.data.length===0||!this.data[0]||prop['chart.labels'].length!=this.data[0].length){labelX=this.gutterLeft+prop['chart.hmargin']+((ca.width-this.gutterLeft-this.gutterRight-(2*prop['chart.hmargin']))*(i/(prop['chart.labels'].length-1)));}\nif(!labelX){labelX=this.gutterLeft+prop['chart.hmargin'];}\nif(prop['chart.xaxispos']=='top'&&prop['chart.text.angle']>0){halign='left';}\nif(prop['chart.text.angle']!=0){halign='right';}\nRG.Text2(this,{'font':font,'size':text_size,'bold':bold,'x':labelX+offsetx,'y':(prop['chart.xaxispos']=='top')?this.gutterTop-yOffset-(prop['chart.xlabels.inside']?-22:0)+offsety:(ca.height-this.gutterBottom)+yOffset+offsety,'text':String(prop['chart.labels'][i]),'valign':valign,'halign':halign,'bounding':bordered,'boundingFill':bgcolor,'angle':angle,'tag':'labels'});}}}\nco.stroke();co.fill();}\nthis.drawLine=this.DrawLine=function(lineData,color,fill,linewidth,tickmarks,index)\n{if(prop['chart.animation.unfold.y']&&prop['chart.animation.factor']!=1){for(var i=0;i<lineData.length;++i){lineData[i]*=prop['chart.animation.factor'];}}\nvar penUp=false;var yPos=null;var xPos=0;co.lineWidth=1;var lineCoords=[];if(index>0){var prevLineCoords=this.coords2[index-1];}\nvar xInterval=(ca.width-(2*prop['chart.hmargin'])-this.gutterLeft-this.gutterRight)/(lineData.length-1);for(i=0,len=lineData.length;i<len;i+=1){var data_point=lineData[i];var yPos=this.getYCoord(data_point);if(lineData[i]==null||(prop['chart.xaxispos']=='bottom'&&lineData[i]<this.min&&!prop['chart.outofbounds'])||(prop['chart.xaxispos']=='center'&&lineData[i]<(-1*this.max)&&!prop['chart.outofbounds'])||(((lineData[i]<this.min&&prop['chart.xaxispos']!=='center')||lineData[i]>this.max)&&!prop['chart.outofbounds'])){yPos=null;}\nco.lineCap='round';co.lineJoin='round';if(i>0){xPos=xPos+xInterval;}else{xPos=prop['chart.hmargin']+this.gutterLeft;}\nif(prop['chart.animation.unfold.x']){xPos*=prop['chart.animation.factor'];if(xPos<prop['chart.gutter.left']){xPos=prop['chart.gutter.left'];}}\nthis.coords.push([xPos,yPos]);lineCoords.push([xPos,yPos]);}\nco.stroke();this.coords2[index]=lineCoords;if(RG.ISOLD&&prop['chart.shadow']){this.DrawIEShadow(lineCoords,co.shadowColor);}\nco.beginPath();co.strokeStyle='rgba(0,0,0,0)';if(fill){co.fillStyle=fill;}\nvar isStepped=prop['chart.stepped'];var isFilled=prop['chart.filled'];if(prop['chart.xaxispos']=='top'){var xAxisPos=this.gutterTop;}else if(prop['chart.xaxispos']=='center'){var xAxisPos=this.gutterTop+(this.grapharea/2);}else if(prop['chart.xaxispos']=='bottom'){var xAxisPos=this.getYCoord(prop['chart.ymin'])}\nfor(var i=0,len=lineCoords.length;i<len;i+=1){xPos=lineCoords[i][0];yPos=lineCoords[i][1];var set=index;var prevY=(lineCoords[i-1]?lineCoords[i-1][1]:null);var isLast=(i+1)==lineCoords.length;if(!prop['chart.outofbounds']&&(prevY<this.gutterTop||prevY>(ca.height-this.gutterBottom))){penUp=true;}\nif(i==0||penUp||!yPos||!prevY||prevY<this.gutterTop){if(prop['chart.filled']&&!prop['chart.filled.range']){if(!prop['chart.outofbounds']||prevY===null||yPos===null){co.moveTo(xPos+1,xAxisPos);}\nif(prop['chart.xaxispos']=='top'){co.moveTo(xPos+1,xAxisPos);}\nif(isStepped&&i>0){co.lineTo(xPos,lineCoords[i-1][1]);}\nco.lineTo(xPos,yPos);}else{if(RG.ISOLD&&yPos==null){}else{co.moveTo(xPos+1,yPos);}}\nif(yPos==null){penUp=true;}else{penUp=false;}}else{if(isStepped){co.lineTo(xPos,lineCoords[i-1][1]);}\nif((yPos>=this.gutterTop&&yPos<=(ca.height-this.gutterBottom))||prop['chart.outofbounds']){if(isLast&&prop['chart.filled']&&!prop['chart.filled.range']&&prop['chart.yaxispos']=='right'){xPos-=1;}\nif(!isStepped||!isLast){co.lineTo(xPos,yPos);if(isFilled&&lineCoords[i+1]&&lineCoords[i+1][1]==null){co.lineTo(xPos,xAxisPos);}}else if(isStepped&&isLast){co.lineTo(xPos,yPos);}\npenUp=false;}else{penUp=true;}}}\nif(prop['chart.filled']&&!prop['chart.filled.range']&&!prop['chart.curvy']){var fillStyle=prop['chart.fillstyle'];if(index>0&&prop['chart.filled.accumulative']){co.lineTo(xPos,prevLineCoords?prevLineCoords[i-1][1]:(ca.height-this.gutterBottom-1+(prop['chart.xaxispos']=='center'?(ca.height-this.gutterTop-this.gutterBottom)/2:0)));for(var k=(i-1);k>=0;--k){co.lineTo(k==0?prevLineCoords[k][0]+1:prevLineCoords[k][0],prevLineCoords[k][1]);}}else{if(prop['chart.xaxispos']=='top'){co.lineTo(xPos,prop['chart.gutter.top']+1);co.lineTo(lineCoords[0][0],prop['chart.gutter.top']+1);}else if(typeof(lineCoords[i-1][1])=='number'){var yPosition=this.getYCoord(0);co.lineTo(xPos,yPosition);co.lineTo(lineCoords[0][0],yPosition);}}\nco.fillStyle=!this.hidden(index)?fill:'rgba(0,0,0,0)';co.fill();co.beginPath();}\nco.stroke();if(prop['chart.backdrop']){this.DrawBackdrop(lineCoords,color);}\nco.save();co.beginPath();if(prop['chart.animation.trace.center']){co.rect((ca.width/2)*(1-prop['chart.animation.trace.clip']),0,ca.width*prop['chart.animation.trace.clip'],ca.height);}else{co.rect(0,0,ca.width*prop['chart.animation.trace.clip'],ca.height);}\nco.clip();if(typeof prop['chart.errorbars']!=='null'){this.drawErrorbars();}\nthis.SetShadow(index);this.redrawLine(lineCoords,color,linewidth,index);co.stroke();RG.NoShadow(this);for(var i=0;i<lineCoords.length;++i){i=Number(i);co.strokeStyle=color;if(isStepped&&i==(lineCoords.length-1)){co.beginPath();}\nif((tickmarks!='endcircle'&&tickmarks!='endsquare'&&tickmarks!='filledendsquare'&&tickmarks!='endtick'&&tickmarks!='endtriangle'&&tickmarks!='arrow'&&tickmarks!='filledarrow')||(i==0&&tickmarks!='arrow'&&tickmarks!='filledarrow')||i==(lineCoords.length-1)){var prevX=(i<=0?null:lineCoords[i-1][0]);var prevY=(i<=0?null:lineCoords[i-1][1]);this.DrawTick(lineData,lineCoords[i][0],lineCoords[i][1],color,false,prevX,prevY,tickmarks,i,index);}}\nco.restore();co.beginPath();co.arc(ca.width+50000,ca.height+50000,2,0,6.38,1);};this.drawTick=this.DrawTick=function(lineData,xPos,yPos,color,isShadow,prevX,prevY,tickmarks,index,dataset)\n{if(this.hidden(dataset)){return;}else if(RG.is_null(yPos)){return false;}else if((yPos>(ca.height-this.gutterBottom))&&!prop['chart.outofbounds']){return;}else if((yPos<this.gutterTop)&&!prop['chart.outofbounds']){return;}\nco.beginPath();var offset=0;co.lineWidth=prop['chart.tickmarks.linewidth']?prop['chart.tickmarks.linewidth']:prop['chart.linewidth'];co.strokeStyle=isShadow?prop['chart.shadow.color']:co.strokeStyle;co.fillStyle=isShadow?prop['chart.shadow.color']:co.strokeStyle;if(tickmarks=='circle'||tickmarks=='filledcircle'||tickmarks=='endcircle'){if(tickmarks=='circle'||tickmarks=='filledcircle'||(tickmarks=='endcircle'&&(index==0||index==(lineData.length-1)))){co.beginPath();co.arc(xPos+offset,yPos+offset,prop['chart.ticksize'],0,360/(180/RG.PI),false);if(tickmarks=='filledcircle'){co.fillStyle=isShadow?prop['chart.shadow.color']:co.strokeStyle;}else{co.fillStyle=isShadow?prop['chart.shadow.color']:'white';}\nco.stroke();co.fill();}}else if(tickmarks=='halftick'){co.beginPath();co.moveTo(Math.round(xPos),yPos);co.lineTo(Math.round(xPos),yPos+prop['chart.ticksize']);co.stroke();}else if(tickmarks=='tick'){co.beginPath();co.moveTo(Math.round(xPos),yPos-prop['chart.ticksize']);co.lineTo(Math.round(xPos),yPos+prop['chart.ticksize']);co.stroke();}else if(tickmarks=='endtick'&&(index==0||index==(lineData.length-1))){co.beginPath();co.moveTo(Math.round(xPos),yPos-prop['chart.ticksize']);co.lineTo(Math.round(xPos),yPos+prop['chart.ticksize']);co.stroke();}else if(tickmarks=='cross'){co.beginPath();var ticksize=prop['chart.ticksize'];co.moveTo(xPos-ticksize,yPos-ticksize);co.lineTo(xPos+ticksize,yPos+ticksize);co.moveTo(xPos+ticksize,yPos-ticksize);co.lineTo(xPos-ticksize,yPos+ticksize);co.stroke();}else if(tickmarks=='triangle'||tickmarks=='filledtriangle'||(tickmarks=='endtriangle'&&(index==0||index==(lineData.length-1)))){co.beginPath();if(tickmarks=='filledtriangle'){co.fillStyle=isShadow?prop['chart.shadow.color']:co.strokeStyle;}else{co.fillStyle='white';}\nco.moveTo(ma.round(xPos-prop['chart.ticksize']),yPos+prop['chart.ticksize']);co.lineTo(ma.round(xPos),yPos-prop['chart.ticksize']);co.lineTo(ma.round(xPos+prop['chart.ticksize']),yPos+prop['chart.ticksize']);co.closePath();co.stroke();co.fill();}else if(tickmarks=='borderedcircle'||tickmarks=='dot'){co.lineWidth=prop['chart.tickmarks.dot.linewidth']||0.00000001;pa2(co,['b','a',xPos,yPos,prop['chart.ticksize'],0,360/(180/RG.PI),false,'c','f',prop['chart.tickmarks.dot.fill']||color,'s',prop['chart.tickmarks.dot.stroke']||color]);}else if(tickmarks=='square'||tickmarks=='filledsquare'||(tickmarks=='endsquare'&&(index==0||index==(lineData.length-1)))||(tickmarks=='filledendsquare'&&(index==0||index==(lineData.length-1)))){co.fillStyle='white';co.strokeStyle=co.strokeStyle;co.beginPath();co.rect(Math.round(xPos-prop['chart.ticksize']),Math.round(yPos-prop['chart.ticksize']),prop['chart.ticksize']*2,prop['chart.ticksize']*2);if(tickmarks=='filledsquare'||tickmarks=='filledendsquare'){co.fillStyle=isShadow?prop['chart.shadow.color']:co.strokeStyle;co.rect(Math.round(xPos-prop['chart.ticksize']),Math.round(yPos-prop['chart.ticksize']),prop['chart.ticksize']*2,prop['chart.ticksize']*2);}else if(tickmarks=='square'||tickmarks=='endsquare'){co.fillStyle=isShadow?prop['chart.shadow.color']:'white';co.rect(Math.round((xPos-prop['chart.ticksize'])+1),Math.round((yPos-prop['chart.ticksize'])+1),(prop['chart.ticksize']*2)-2,(prop['chart.ticksize']*2)-2);}\nco.stroke();co.fill();}else if(tickmarks=='filledarrow'){var x=Math.abs(xPos-prevX);var y=Math.abs(yPos-prevY);if(yPos<prevY){var a=Math.atan(x/y)+1.57;}else{var a=Math.atan(y/x)+3.14;}\nco.beginPath();co.moveTo(Math.round(xPos),Math.round(yPos));co.arc(Math.round(xPos),Math.round(yPos),7,a-0.5,a+0.5,false);co.closePath();co.stroke();co.fill();}else if(tickmarks=='arrow'){var orig_linewidth=co.lineWidth;var x=Math.abs(xPos-prevX);var y=Math.abs(yPos-prevY);co.lineWidth;if(yPos<prevY){var a=Math.atan(x/y)+1.57;}else{var a=Math.atan(y/x)+3.14;}\nco.beginPath();co.moveTo(Math.round(xPos),Math.round(yPos));co.arc(Math.round(xPos),Math.round(yPos),7,a-0.5-(doc.all?0.1:0.01),a-0.4,false);co.moveTo(Math.round(xPos),Math.round(yPos));co.arc(Math.round(xPos),Math.round(yPos),7,a+0.5+(doc.all?0.1:0.01),a+0.5,true);co.stroke();co.fill();co.lineWidth=orig_linewidth;}else if(typeof tickmarks==='string'&&(tickmarks.substr(0,6)==='image:'||tickmarks.substr(0,5)==='data:'||tickmarks.substr(0,1)==='/'||tickmarks.substr(0,3)==='../'||tickmarks.substr(0,7)==='images/')){var img=new Image();if(tickmarks.substr(0,6)==='image:'){img.src=tickmarks.substr(6);}else{img.src=tickmarks;}\nimg.onload=function()\n{if(prop['chart.tickmarks.image.halign']==='center')xPos-=(this.width/2);if(prop['chart.tickmarks.image.halign']==='right')xPos-=this.width;if(prop['chart.tickmarks.image.valign']==='center')yPos-=(this.height/2);if(prop['chart.tickmarks.image.valign']==='bottom')yPos-=this.height;xPos+=prop['chart.tickmarks.image.offsetx'];yPos+=prop['chart.tickmarks.image.offsety'];co.drawImage(this,xPos,yPos);};}else if(typeof(tickmarks)=='function'){tickmarks(this,lineData,lineData[index],index,xPos,yPos,color,prevX,prevY);}};this.drawRange=this.DrawRange=function()\n{if(prop['chart.filled.range']&&prop['chart.filled']){if(RG.isNull(prop['chart.filled.range.threshold'])){prop['chart.filled.range.threshold']=this.ymin\nprop['chart.filled.range.threshold.colors']=[prop['chart.fillstyle'],prop['chart.fillstyle']]}\nfor(var idx=0;idx<2;++idx){var threshold_colors=prop['chart.filled.range.threshold.colors'];var y=this.getYCoord(prop['chart.filled.range.threshold'])\nco.save();if(idx==0){co.beginPath();co.rect(0,0,ca.width,y);co.clip();}else{co.beginPath();co.rect(0,y,ca.width,ca.height);co.clip();}\nco.beginPath();co.fillStyle=(idx==1?prop['chart.filled.range.threshold.colors'][1]:prop['chart.filled.range.threshold.colors'][0]);co.lineWidth=!this.hidden(idx)?1:0;var len=(this.coords.length/2);for(var i=0;i<len;++i){if(!RG.is_null(this.coords[i][1])){if(i==0){co.moveTo(this.coords[i][0],this.coords[i][1])}else{co.lineTo(this.coords[i][0],this.coords[i][1])}}}\nfor(var i=this.coords.length-1;i>=len;--i){if(RG.is_null(this.coords[i][1])){co.moveTo(this.coords[i][0],this.coords[i][1])}else{co.lineTo(this.coords[i][0],this.coords[i][1])}}\nco.fill();co.restore();}}};this.redrawLine=this.RedrawLine=function(coords,color,linewidth,index)\n{if(prop['chart.noredraw']||prop['chart.filled.range']){return;}\nco.strokeStyle=(typeof(color)=='object'&&color&&color.toString().indexOf('CanvasGradient')==-1?color[0]:color);co.lineWidth=linewidth;if(prop['chart.dashed']){co.setLineDash([2,6])}else if(prop['chart.dotted']){co.setLineDash([1,5])}\nif(this.hidden(index)){co.strokeStyle='rgba(0,0,0,0)';}\nif(!RG.ISOLD&&(prop['chart.curvy']||prop['chart.spline'])){this.DrawCurvyLine(coords,this.hidden(index)?'rgba(0,0,0,0)':color,linewidth,index);return;}\nco.beginPath();var len=coords.length;var width=ca.width\nvar height=ca.height;var penUp=false;for(var i=0;i<len;++i){var xPos=coords[i][0];var yPos=coords[i][1];if(i>0){var prevX=coords[i-1][0];var prevY=coords[i-1][1];}\nif(((i==0&&coords[i])||(yPos<this.gutterTop)||(prevY<this.gutterTop)||(yPos>(height-this.gutterBottom))||(i>0&&prevX>(width-this.gutterRight))||(i>0&&prevY>(height-this.gutterBottom))||prevY==null||penUp==true)&&(!prop['chart.outofbounds']||yPos==null||prevY==null)){if(RG.ISOLD&&yPos==null){}else{co.moveTo(coords[i][0],coords[i][1]);}\npenUp=false;}else{if(prop['chart.stepped']&&i>0){co.lineTo(coords[i][0],coords[i-1][1]);}\nco.lineTo(coords[i][0],coords[i][1]);penUp=false;}}\nif(prop['chart.colors.alternate']&&typeof(color)=='object'&&color[0]&&color[1]){for(var i=1;i<len;++i){var prevX=coords[i-1][0];var prevY=coords[i-1][1];if(prevY!=null&&coords[i][1]!=null){co.beginPath();co.strokeStyle=color[coords[i][1]<prevY?0:1];co.lineWidth=prop['chart.linewidth'];co.moveTo(prevX,prevY);co.lineTo(coords[i][0],coords[i][1]);co.stroke();}}}\nif(prop['chart.dashed']||prop['chart.dotted']){co.setLineDash([1,0]);}};this.drawIEShadow=this.DrawIEShadow=function(coords,color)\n{var offsetx=prop['chart.shadow.offsetx'];var offsety=prop['chart.shadow.offsety'];co.lineWidth=prop['chart.linewidth'];co.strokeStyle=color;co.beginPath();for(var i=0;i<coords.length;++i){var isNull=RG.isNull(coords[i][1]);var prevIsNull=RG.isNull(coords[i-1])||RG.isNull(coords[i-1][1]);if(i==0||isNull||prevIsNull){if(!isNull){co.moveTo(coords[i][0]+offsetx,coords[i][1]+offsety);}}else{co.lineTo(coords[i][0]+offsetx,coords[i][1]+offsety);}}\nco.stroke();};this.drawBackdrop=this.DrawBackdrop=function(coords,color)\n{var size=prop['chart.backdrop.size'];co.lineWidth=size;co.globalAlpha=prop['chart.backdrop.alpha'];co.strokeStyle=color;var yCoords=[];co.beginPath();if(prop['chart.curvy']&&!RG.ISOLD){for(var i=0;i<coords.length;++i){yCoords.push(coords[i][1])}\nthis.DrawSpline(co,yCoords,color,null);}else{co.moveTo(coords[0][0],coords[0][1]);for(var j=1;j<coords.length;++j){co.lineTo(coords[j][0],coords[j][1]);}}\nco.stroke();co.globalAlpha=1;RG.NoShadow(this);};this.getLineWidth=this.GetLineWidth=function(i)\n{var linewidth=prop['chart.linewidth'];if(typeof(linewidth)=='number'){return linewidth;}else if(typeof(linewidth)=='object'){if(linewidth[i]){return linewidth[i];}else{return linewidth[0];}\nalert('[LINE] Error! chart.linewidth should be a single number or an array of one or more numbers');}};this.getShape=this.getPoint=function(e)\n{var obj=this,mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];if(arguments[1]){obj=arguments[1];}\nfor(var i=0;i<obj.coords.length;++i){var x=obj.coords[i][0],y=obj.coords[i][1];if(mouseX<=(x+prop['chart.tooltips.hotspot.size'])&&mouseX>=(x-prop['chart.tooltips.hotspot.size'])&&mouseY<=(y+prop['chart.tooltips.hotspot.size'])&&mouseY>=(y-prop['chart.tooltips.hotspot.size'])){if(RG.parseTooltipText){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);}\nvar dataset=0,idx=i;while((idx+1)>this.data[dataset].length){idx-=this.data[dataset].length;dataset++;}\nif(this.hidden(dataset)){continue;}\nreturn{0:obj,object:obj,1:x,x:x,2:y,y:y,3:i,index:i,tooltip:tooltip,dataset:dataset,index_adjusted:idx};}else if(prop['chart.tooltips.hotspot.xonly']==true&&mouseX<=(x+prop['chart.tooltips.hotspot.size'])&&mouseX>=(x-prop['chart.tooltips.hotspot.size'])){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:obj,object:obj,1:x,x:x,2:y,y:y,3:i,index:i,tooltip:tooltip};}}};this.drawAboveLabels=this.DrawAboveLabels=function()\n{var size=prop['chart.labels.above.size'],font=prop['chart.labels.above.font']||prop['chart.text.font'],units_pre=prop['chart.labels.above.units.pre'],units_post=prop['chart.labels.above.units.post'],decimals=prop['chart.labels.above.decimals'],color=prop['chart.labels.above.color']||prop['chart.text.color'],bgcolor=prop['chart.labels.above.background']||'white',border=((typeof prop['chart.labels.above.border']==='boolean'||typeof prop['chart.labels.above.border']==='number')?prop['chart.labels.above.border']:true),offsety=prop['chart.labels.above.offsety']+size,specific=prop['chart.labels.above.specific'];co.beginPath();for(var i=0,len=this.coords.length;i<len;i+=1){var coords=this.coords[i];RG.text2(this,{color:color,'font':font,'size':size,'x':coords[0],'y':coords[1]-offsety,'text':(specific&&specific[i])?specific[i]:(specific?null:RG.numberFormat(this,typeof decimals==='number'?this.data_arr[i].toFixed(decimals):this.data_arr[i],units_pre,units_post)),'valign':'center','halign':'center','bounding':true,'boundingFill':bgcolor,'boundingStroke':border?'black':'rgba(0,0,0,0)','tag':'labels.above'});}};this.drawCurvyLine=this.DrawCurvyLine=function(coords,color,linewidth,index)\n{var yCoords=[];for(var i=0;i<coords.length;++i){yCoords.push(coords[i][1]);}\nif(prop['chart.filled']){co.beginPath();var xaxisY=this.getYCoord(prop['chart.ymin']);co.moveTo(coords[0][0],xaxisY);this.drawSpline(co,yCoords,color,index);if(prop['chart.filled.accumulative']&&index>0){for(var i=(this.coordsSpline[index-1].length-1);i>=0;i-=1){co.lineTo(this.coordsSpline[index-1][i][0],this.coordsSpline[index-1][i][1]);}}else{co.lineTo(coords[coords.length-1][0],xaxisY);}\nco.fill();}\nco.beginPath();this.DrawSpline(co,yCoords,color,index);co.stroke();};this.getValue=function(arg)\n{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}\nvar obj=this;var xaxispos=prop['chart.xaxispos'];if(mouseY<prop['chart.gutter.top']){return xaxispos=='bottom'||xaxispos=='center'?this.max:this.min;}else if(mouseY>(ca.height-prop['chart.gutter.bottom'])){return xaxispos=='bottom'?this.min:this.max;}\nif(prop['chart.xaxispos']=='center'){var value=(((obj.grapharea/2)-(mouseY-prop['chart.gutter.top']))/obj.grapharea)*(obj.max-obj.min);value*=2;value>0?value+=this.min:value-=this.min;return value;}else if(prop['chart.xaxispos']=='top'){var value=((obj.grapharea-(mouseY-prop['chart.gutter.top']))/obj.grapharea)*(obj.max-obj.min);value=Math.abs(obj.max-value)* -1;return value;}else{var value=((obj.grapharea-(mouseY-prop['chart.gutter.top']))/obj.grapharea)*(obj.max-obj.min)\nvalue+=obj.min;return value;}};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else if(prop['chart.highlight.style']==='halo'){var obj=shape.object,color=prop['chart.colors'][shape.dataset];RG.path2(obj.context,'b a % % 13 0 6.2830 false f rgba(255,255,255,0.75)',shape.x,shape.y);RG.path2(obj.context,'ga 0.15 b a % % 13 0 6.2830 false f % ga 1',shape.x,shape.y,color);RG.path2(obj.context,'b a % % 7 0 6.2830 false f white',shape.x,shape.y);RG.path2(obj.context,'b a % % 5 0 6.2830 false f %',shape.x,shape.y,color);}else{RG.Highlight.Point(this,shape);}}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if((mouseXY[0]>prop['chart.gutter.left']-5)&&mouseXY[0]<(ca.width-prop['chart.gutter.right']+5)&&mouseXY[1]>(prop['chart.gutter.top']-5)&&mouseXY[1]<(ca.height-prop['chart.gutter.bottom']+5)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var value=Number(this.getValue(e));var shape=RG.Registry.Get('chart.adjusting.shape');if(shape){RG.Registry.Set('chart.adjusting.shape',shape);this.original_data[shape['dataset']][shape['index_adjusted']]=Number(value);RG.redrawCanvas(e.target);RG.fireCustomEvent(this,'onadjust');}}};this.getYCoord=function(value)\n{if(typeof(value)!='number'){return null;}\nvar y;var xaxispos=prop['chart.xaxispos'];if(xaxispos=='top'){y=((value-this.min)/(this.max-this.min))*this.grapharea;if(prop['chart.scale.invert']){y=this.grapharea-y;}\ny=y+this.gutterTop}else if(xaxispos=='center'){y=((value-this.min)/(this.max-this.min))*(this.grapharea/2);y=(this.grapharea/2)-y;y+=this.gutterTop;}else{if((value<this.min||value>this.max)&&prop['chart.outofbounds']==false){return null;}\ny=((value-this.min)/(this.max-this.min))*this.grapharea;if(prop['chart.scale.invert']){y=this.grapharea-y;}\ny=ca.height-this.gutterBottom-y;}\nreturn y;};this.drawSpline=this.DrawSpline=function(context,coords,color,index)\n{this.coordsSpline[index]=[];var xCoords=[];var gutterLeft=prop['chart.gutter.left'];var gutterRight=prop['chart.gutter.right'];var hmargin=prop['chart.hmargin'];var interval=(ca.width-(gutterLeft+gutterRight)-(2*hmargin))/(coords.length-1);co.strokeStyle=color;for(var i=0,len=coords.length;i<len;i+=1){if(typeof coords[i]=='object'&&coords[i]&&coords[i].length==2){coords[i]=Number(coords[i][1]);}}\nvar P=[coords[0]];for(var i=0;i<coords.length;++i){P.push(coords[i]);}\nP.push(coords[coords.length-1]+(coords[coords.length-1]-coords[coords.length-2]));for(var j=1;j<P.length-2;++j){for(var t=0;t<10;++t){var yCoord=Spline(t/10,P[j-1],P[j],P[j+1],P[j+2]);xCoords.push(((j-1)*interval)+(t*(interval/10))+gutterLeft+hmargin);co.lineTo(xCoords[xCoords.length-1],yCoord);if(typeof index=='number'){this.coordsSpline[index].push([xCoords[xCoords.length-1],yCoord]);}}}\nco.lineTo(((j-1)*interval)+gutterLeft+hmargin,P[j]);if(typeof index=='number'){this.coordsSpline[index].push([((j-1)*interval)+gutterLeft+hmargin,P[j]]);}\nfunction Spline(t,P0,P1,P2,P3)\n{return 0.5*((2*P1)+\n((0-P0)+P2)*t+\n((2*P0-(5*P1)+(4*P2)-P3)*(t*t)+\n((0-P0)+(3*P1)-(3*P2)+P3)*(t*t*t)));}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RGraph.array_clone(prop['chart.colors']);this.original_colors['chart.fillstyle']=RGraph.array_clone(prop['chart.fillstyle']);this.original_colors['chart.key.colors']=RGraph.array_clone(prop['chart.key.colors']);this.original_colors['chart.background.barcolor1']=prop['chart.background.barcolor1'];this.original_colors['chart.background.barcolor2']=prop['chart.background.barcolor2'];this.original_colors['chart.background.grid.color']=prop['chart.background.grid.color'];this.original_colors['chart.background.color']=prop['chart.background.color'];this.original_colors['chart.text.color']=prop['chart.text.color'];this.original_colors['chart.crosshairs.color']=prop['chart.crosshairs.color'];this.original_colors['chart.annotate.color']=prop['chart.annotate.color'];this.original_colors['chart.title.color']=prop['chart.title.color'];this.original_colors['chart.title.yaxis.color']=prop['chart.title.yaxis.color'];this.original_colors['chart.key.background']=prop['chart.key.background'];this.original_colors['chart.axis.color']=prop['chart.axis.color'];this.original_colors['chart.highlight.fill']=prop['chart.highlight.fill'];}\nfor(var i=0;i<prop['chart.colors'].length;++i){if(typeof(prop['chart.colors'][i])=='object'&&prop['chart.colors'][i][0]&&prop['chart.colors'][i][1]){prop['chart.colors'][i][0]=this.parseSingleColorForGradient(prop['chart.colors'][i][0]);prop['chart.colors'][i][1]=this.parseSingleColorForGradient(prop['chart.colors'][i][1]);}else{prop['chart.colors'][i]=this.parseSingleColorForGradient(prop['chart.colors'][i]);}}\nif(prop['chart.fillstyle']){if(typeof(prop['chart.fillstyle'])=='string'){prop['chart.fillstyle']=this.parseSingleColorForGradient(prop['chart.fillstyle'],'vertical');}else{for(var i=0;i<prop['chart.fillstyle'].length;++i){prop['chart.fillstyle'][i]=this.parseSingleColorForGradient(prop['chart.fillstyle'][i],'vertical');}}}\nif(!RG.is_null(prop['chart.key.colors'])){for(var i=0;i<prop['chart.key.colors'].length;++i){prop['chart.key.colors'][i]=this.parseSingleColorForGradient(prop['chart.key.colors'][i]);}}\nvar properties=['chart.background.barcolor1','chart.background.barcolor2','chart.background.grid.color','chart.background.color','chart.text.color','chart.crosshairs.color','chart.annotate.color','chart.title.color','chart.title.yaxis.color','chart.key.background','chart.axis.color','chart.highlight.fill'];for(var i=0;i<properties.length;++i){prop[properties[i]]=this.parseSingleColorForGradient(prop[properties[i]]);}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nvar dir=typeof(arguments[1])=='string'?arguments[1]:'vertical';if(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');if(dir=='horizontal'){var grad=co.createLinearGradient(0,0,ca.width,0);}else{var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);}\nvar diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.setShadow=this.SetShadow=function(i)\n{if(prop['chart.shadow']){var shadowColor=prop['chart.shadow.color'];if(typeof(shadowColor)=='object'&&shadowColor[i-1]){co.shadowColor=shadowColor[i];}else if(typeof(shadowColor)=='object'){co.shadowColor=shadowColor[0];}else if(typeof(shadowColor)=='string'){co.shadowColor=shadowColor;}\nco.shadowBlur=prop['chart.shadow.blur'];co.shadowOffsetX=prop['chart.shadow.offsetx'];co.shadowOffsetY=prop['chart.shadow.offsety'];}};this.interactiveKeyHighlight=function(index)\n{var coords=this.coords2[index];if(coords){var pre_linewidth=co.lineWidth;var pre_linecap=co.lineCap;co.lineWidth=prop['chart.linewidth']+10;co.lineCap='round';co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.beginPath();if(prop['chart.curvy']){this.DrawSpline(co,coords,prop['chart.key.interactive.highlight.chart'],null);}else{for(var i=0,len=coords.length;i<len;i+=1){if(i==0||RG.is_null(coords[i][1])||(typeof coords[i-1][1]!=undefined&&RG.is_null(coords[i-1][1]))){co.moveTo(coords[i][0],coords[i][1]);}else{co.lineTo(coords[i][0],coords[i][1]);}}}\nco.stroke();co.lineWidth=pre_linewidth;co.lineCap=pre_linecap;}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.drawErrorbars=function()\n{co.save();RG.noShadow(this);var coords=this.coords,x=0,errorbars=prop['chart.errorbars'],length=0;if(!prop['chart.errorbars.capped']){prop['chart.errorbars.capped.width']=0.001;halfwidth=0.0005;}\nco.lineWidth=prop['chart.errorbars.linewidth'];for(var i=0;i<coords.length;++i){var halfwidth=prop['chart.errorbars.capped.width']/2||5,color=prop['chart.errorbars.color']||'black';if(errorbars[i]&&typeof errorbars[i][3]==='number'){co.lineWidth=errorbars[i][3];}else if(typeof prop['chart.errorbars.linewidth']==='number'){co.lineWidth=prop['chart.errorbars.linewidth'];}else{co.lineWidth=1;}\nif(typeof errorbars==='number'||typeof errorbars[i]==='number'){if(typeof errorbars==='number'){var positiveLength=this.getYCoord(this.min)-this.getYCoord(this.min+errorbars),negativeLength=positiveLength;}else{var positiveLength=this.getYCoord(this.min)-this.getYCoord(this.min+errorbars[i]),negativeLength=positiveLength;}\nif(positiveLength||negativeLength){pa2(co,'lj miter lc square b m % % l % % m % % l % % l % % m % % l % % s %',coords[i][0]-halfwidth,coords[i][1]+negativeLength,coords[i][0]+halfwidth,coords[i][1]+negativeLength,coords[i][0],coords[i][1]+negativeLength,coords[i][0],coords[i][1]-positiveLength,coords[i][0]-halfwidth,coords[i][1]-positiveLength,coords[i][0],coords[i][1]-positiveLength,coords[i][0]+halfwidth,coords[i][1]-positiveLength,color);pa2(co,'lj miter lc square b m % % l % % s %',coords[i][0]-halfwidth,coords[i][1]+negativeLength,coords[i][0]+halfwidth,coords[i][1]+negativeLength,color);}}else if(typeof errorbars[i]==='object'&&!RG.isNull(errorbars[i])){var positiveLength=this.getYCoord(this.min)-this.getYCoord(this.min+errorbars[i][0]),negativeLength=this.getYCoord(this.min)-this.getYCoord(this.min+errorbars[i][1]);if(typeof errorbars[i][2]==='string'){color=errorbars[i][2];}\nhalfwidth=typeof errorbars[i][4]==='number'?errorbars[i][4]/2:halfwidth;if(typeof errorbars[i]==='object'&&typeof errorbars[i][3]==='number'){co.lineWidth=errorbars[i][3];}else if(typeof prop['chart.errorbars.linewidth']==='number'){co.lineWidth=prop['chart.errorbars.linewidth'];}else{co.lineWidth=1;}\nif(!RG.isNull(errorbars[i][0])){pa2(co,'lc square b  m % % l % % l % % m % % l % % s %',coords[i][0],coords[i][1],coords[i][0],coords[i][1]-positiveLength,coords[i][0]-halfwidth,ma.round(coords[i][1]-positiveLength),coords[i][0],ma.round(coords[i][1]-positiveLength),coords[i][0]+halfwidth,ma.round(coords[i][1]-positiveLength),color);}\nif(typeof errorbars[i][1]==='number'){var negativeLength=ma.abs(this.getYCoord(errorbars[i][1])-this.getYCoord(0));pa2(co,'b m % % l % % l % % m % % l % % s %',coords[i][0],coords[i][1],coords[i][0],coords[i][1]+negativeLength,coords[i][0]-halfwidth,ma.round(coords[i][1]+negativeLength),coords[i][0],ma.round(coords[i][1]+negativeLength),coords[i][0]+halfwidth,ma.round(coords[i][1]+negativeLength),color);}}}\nco.restore();};this.hide=function()\n{if(typeof arguments[0]==='number'){prop['chart.line.visible'][arguments[0]]=false;}else if(typeof arguments[0]==='object'){for(var i=0;i<arguments[0].length;++i){prop['chart.line.visible'][arguments[0][i]]=false;}}else{for(var i=0;i<this.original_data.length;++i){prop['chart.line.visible'][i]=false;}}\nRG.redraw();return this;};this.show=function()\n{if(typeof arguments[0]==='number'){prop['chart.line.visible'][arguments[0]]=true;}else if(typeof arguments[0]==='object'){for(var i=0;i<arguments[0].length;++i){prop['chart.line.visible'][arguments[0][i]]=true;}}else{for(var i=0;i<this.original_data.length;++i){prop['chart.line.visible'][i]=true;}}\nRG.redraw();return this;};this.hidden=function(index)\n{return!prop['chart.line.visible'][index];};this.unfold=function()\n{var obj=this;var opt=arguments[0]?arguments[0]:{};var frames=opt.frames?opt.frames:30;var frame=0;var callback=arguments[1]?arguments[1]:function(){};var initial=prop['chart.animation.unfold.initial'];prop['chart.animation.factor']=prop['chart.animation.unfold.initial'];function iterator()\n{prop['chart.animation.factor']=((1-initial)*(frame/frames))+initial;RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame<frames){frame++;RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.trace=this.trace2=function()\n{var obj=this;var callback=arguments[2];var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var callback=arguments[1]||function(){};obj.Set('animation.trace.clip',0);function iterator()\n{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){obj.Set('animation.trace.clip',frame/frames);RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.foldtocenter=this.foldToCenter=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var callback=arguments[1]||function(){};var center_value=obj.scale2.max/2;obj.Set('chart.ymax',obj.scale2.max);var original_data=RG.array_clone(obj.original_data);function iterator()\n{for(var i=0,len=obj.data.length;i<len;++i){if(obj.data[i].length){for(var j=0,len2=obj.data[i].length;j<len2;++j){var dataset=obj.original_data[i];if(dataset[j]>center_value){dataset[j]=original_data[i][j]-((original_data[i][j]-center_value)*(frame/frames));}else{dataset[j]=original_data[i][j]+(((center_value-original_data[i][j])/frames)*frame);}}}}\nRG.clear(obj.canvas);RG.redrawCanvas(obj.canvas)\nif(frame++<frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.unfoldFromCenterTrace=this.unfoldFromCenterTrace2=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||30,frame=0,data=RG.arrayClone(obj.original_data),callback=arguments[1]||function(){};obj.canvas.style.visibility='hidden';obj.draw();var max=obj.scale2.max;RG.clear(obj.canvas);obj.canvas.style.visibility='visible';var unfoldCallback=function()\n{obj.original_data=data;obj.unfoldFromCenter({frames:frames/2},callback);};var half=obj.Get('chart.xaxispos')=='center'?obj.min:((obj.max-obj.min)/2)+obj.min;obj.Set('chart.ymax',obj.max);for(var i=0,len=obj.original_data.length;i<len;++i){for(var j=0;j<obj.original_data[i].length;++j){obj.original_data[i][j]=(obj.Get('chart.filled')&&obj.Get('chart.filled.accumulative')&&i>0)?0:half;}}\nRG.clear(obj.canvas);obj.trace2({frames:frames/2},unfoldCallback);return obj;};this.unfoldFromCenter=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var callback=arguments[1]||function(){};obj.canvas.style.visibility='hidden';obj.Draw();var max=obj.scale2.max;RG.clear(obj.canvas);obj.canvas.style.visibility='visible';var center_value=obj.Get('chart.xaxispos')==='center'?prop['chart.ymin']:((obj.max-obj.min)/2)+obj.min;var original_data=RG.array_clone(obj.original_data);var steps=null;obj.Set('chart.ymax',max);if(!steps){steps=[];for(var dataset=0,len=original_data.length;dataset<len;++dataset){steps[dataset]=[]\nfor(var i=0,len2=original_data[dataset].length;i<len2;++i){if(prop['chart.filled']&&prop['chart.filled.accumulative']&&dataset>0){steps[dataset][i]=original_data[dataset][i]/frames;obj.original_data[dataset][i]=center_value;}else{steps[dataset][i]=(original_data[dataset][i]-center_value)/frames;obj.original_data[dataset][i]=center_value;}}}}\nfunction unfoldFromCenter()\n{for(var dataset=0;dataset<original_data.length;++dataset){for(var i=0;i<original_data[dataset].length;++i){obj.original_data[dataset][i]+=steps[dataset][i];}}\nRG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(--frames>0){RG.Effects.updateCanvas(unfoldFromCenter);}else{obj.original_data=RG.array_clone(original_data);RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);callback(obj);}}\nunfoldFromCenter();return this;};this.isAdjustable=function(shape)\n{if(RG.isNull(prop['chart.adjustable.only'])){return true;}\nif(RG.isArray(prop['chart.adjustable.only'])&&prop['chart.adjustable.only'][shape.index]){return true;}\nreturn false;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}\nfor(var i=0;i<this.original_data.length;++i){prop['chart.line.visible'][i]=true;}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.meter.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Meter=function(conf)\n{if(typeof conf==='object'&&typeof conf.value!=='undefined'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var min=conf.min;var max=conf.max;var value=conf.value;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var min=arguments[1];var max=arguments[2];var value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='meter';this.min=RGraph.stringsToNumbers(min);this.max=RGraph.stringsToNumbers(max);this.value=RGraph.stringsToNumbers(value);this.centerx=null;this.centery=null;this.radius=null;this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.image.url':null,'chart.background.image.offsetx':0,'chart.background.image.offsety':0,'chart.background.image.stretch':true,'chart.background.color':'white','chart.gutter.left':15,'chart.gutter.right':15,'chart.gutter.top':15,'chart.gutter.bottom':20,'chart.linewidth':1,'chart.linewidth.segments':0,'chart.strokestyle':null,'chart.border':true,'chart.border.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.color':'black','chart.text.valign':'center','chart.text.accessible':false,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.value.text':false,'chart.value.text.font':null,'chart.value.text.size':16,'chart.value.text.bold':false,'chart.value.text.italic':false,'chart.value.text.color':null,'chart.value.text.decimals':0,'chart.value.text.units.pre':'','chart.value.text.units.post':'','chart.value.text.background':true,'chart.value.text.background.fill':'rgba(255,255,255,0.75)','chart.value.text.background.stroke':'rgba(0,0,0,0)','chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.color':'black','chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.green.start':((this.max-this.min)*0.35)+this.min,'chart.green.end':this.max,'chart.green.color':'#207A20','chart.yellow.start':((this.max-this.min)*0.1)+this.min,'chart.yellow.end':((this.max-this.min)*0.35)+this.min,'chart.yellow.color':'#D0AC41','chart.red.start':this.min,'chart.red.end':((this.max-this.min)*0.1)+this.min,'chart.red.color':'#9E1E1E','chart.colors.ranges':null,'chart.units.pre':'','chart.units.post':'','chart.contextmenu':null,'chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.annotatable':false,'chart.annotate.color':'black','chart.shadow':false,'chart.shadow.color':'rgba(0,0,0,0.5)','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.tickmarks.small.num':100,'chart.tickmarks.big.num':10,'chart.tickmarks.small.color':'#bbb','chart.tickmarks.big.color':'black','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.radius':null,'chart.centerx':null,'chart.centery':null,'chart.labels':true,'chart.labels.count':10,'chart.labels.specific':null,'chart.labels.radius.offset':0,'chart.segment.radius.start':0,'chart.needle.radius':null,'chart.needle.type':'normal','chart.needle.tail':false,'chart.needle.head':true,'chart.needle.color':'black','chart.needle.image.url':null,'chart.needle.image.offsetx':0,'chart.needle.image.offsety':0,'chart.adjustable':false,'chart.angles.start':RGraph.PI,'chart.angles.end':RGraph.TWOPI,'chart.centerpin.stroke':'black','chart.centerpin.fill':'white','chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[METER] No canvas support');return;}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=arguments[1]||null;if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.value'){this.value=value;return;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.value'){return this.value;}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');if(this.value>this.max)this.value=this.max;if(this.value<this.min)this.value=this.min;this.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=ca.height-this.gutterBottom;this.radius=Math.min((ca.width-this.gutterLeft-this.gutterRight)/2,(ca.height-this.gutterTop-this.gutterBottom));this.coordsText=[];if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.drawBackground();this.drawLabels();this.drawNeedle();this.drawReadout();RG.DrawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);if(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawBackground=this.DrawBackground=function()\n{if(typeof prop['chart.background.image.url']==='string'&&!this.__background_image__){var x=0+prop['chart.background.image.offsetx'];var y=0+prop['chart.background.image.offsety'];var img=new Image();this.__background_image__=img;img.src=prop['chart.background.image.url'];img.onload=function()\n{if(prop['chart.background.image.stretch']){co.drawImage(this,x,y,ca.width,ca.height);}else{co.drawImage(this,x,y);}\nRG.redraw();}}else if(this.__background_image__){var x=0+prop['chart.background.image.offsetx'];var y=0+prop['chart.background.image.offsety'];if(prop['chart.background.image.stretch']){co.drawImage(this.__background_image__,x,y,ca.width,ca.height);}else{co.drawImage(this.__background_image__,x,y);}}\nco.beginPath();co.fillStyle=prop['chart.background.color'];if(prop['chart.shadow']){RG.SetShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,this.radius,prop['chart.angles.start'],prop['chart.angles.end'],false);co.fill();RG.NoShadow(this);if(prop['chart.shadow']){co.beginPath();var r=(this.radius*0.06)>40?40:(this.radius*0.06);co.arc(this.centerx,this.centery,r,0,RG.TWOPI,0);co.fill();RG.NoShadow(this);}\nif(prop['chart.tickmarks.small.num']){for(var i=0;i<(prop['chart.angles.end']-prop['chart.angles.start']);i+=(RG.PI/prop['chart.tickmarks.small.num'])){co.beginPath();co.strokeStyle=prop['chart.tickmarks.small.color'];co.arc(this.centerx,this.centery,this.radius,prop['chart.angles.start']+i,prop['chart.angles.start']+i+0.00001,0);co.arc(this.centerx,this.centery,this.radius-5,prop['chart.angles.start']+i,prop['chart.angles.start']+i+0.00001,0);co.stroke();}\nco.beginPath();co.fillStyle=prop['chart.background.color'];co.arc(this.centerx,this.centery,this.radius-4,prop['chart.angles.start'],prop['chart.angles.end'],false);co.closePath();co.fill();}\nif(prop['chart.tickmarks.big.num']){var colors=['white','white',prop['chart.tickmarks.big.color']];for(var j=0;j<colors.length;++j){for(var i=0;i<(prop['chart.angles.end']-prop['chart.angles.start']);i+=((prop['chart.angles.end']-prop['chart.angles.start'])/prop['chart.tickmarks.big.num'])){co.beginPath();co.strokeStyle=colors[j];co.arc(this.centerx,this.centery,this.radius,prop['chart.angles.start']+i,prop['chart.angles.start']+i+0.001,0);co.arc(this.centerx,this.centery,this.radius-5,prop['chart.angles.start']+i,prop['chart.angles.start']+i+0.0001,0);co.stroke();}}}\nco.beginPath();co.fillStyle=prop['chart.background.color'];co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,this.radius-7,prop['chart.angles.start'],prop['chart.angles.end'],false);co.closePath();co.fill();var ranges=prop['chart.colors.ranges'];if(RG.is_array(prop['chart.colors.ranges'])){var ranges=prop['chart.colors.ranges'];for(var i=0;i<ranges.length;++i){co.strokeStyle=prop['chart.strokestyle']?prop['chart.strokestyle']:ranges[i][2];co.fillStyle=ranges[i][2];co.lineWidth=prop['chart.linewidth.segments'];co.beginPath();co.arc(this.centerx,this.centery,this.radius*0.85,(((ranges[i][0]-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((ranges[i][1]-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],false);if(prop['chart.segment.radius.start']>0){co.arc(this.centerx,this.centery,prop['chart.segment.radius.start'],(((ranges[i][1]-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((ranges[i][0]-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],true);}else{co.lineTo(this.centerx,this.centery);}\nco.closePath();co.stroke();co.fill();}\nco.beginPath();}else{co.lineWidth=prop['chart.linewidth'];co.strokeStyle=prop['chart.strokestyle']?prop['chart.strokestyle']:prop['chart.green.color'];co.fillStyle=prop['chart.green.color'];co.lineWidth=prop['chart.linewidth.segments'];co.beginPath();co.arc(this.centerx,this.centery,this.radius*0.85,(((prop['chart.green.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-this.properties['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.green.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],false);if(prop['chart.segment.radius.start']>0){co.arc(this.centerx,this.centery,prop['chart.segment.radius.start'],(((prop['chart.green.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.green.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],true);}else{co.lineTo(this.centerx,this.centery);}\nco.closePath();co.stroke();co.fill();co.strokeStyle=prop['chart.strokestyle']?prop['chart.strokestyle']:prop['chart.yellow.color'];co.fillStyle=prop['chart.yellow.color'];co.lineWidth=prop['chart.linewidth.segments'];co.beginPath();co.arc(this.centerx,this.centery,this.radius*0.85,(((prop['chart.yellow.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.yellow.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],false);if(prop['chart.segment.radius.start']>0){co.arc(this.centerx,this.centery,prop['chart.segment.radius.start'],(((prop['chart.yellow.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.yellow.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],true);}else{co.lineTo(this.centerx,this.centery);}\nco.closePath();co.stroke();co.fill();co.strokeStyle=prop['chart.strokestyle']?prop['chart.strokestyle']:prop['chart.red.color'];co.fillStyle=prop['chart.red.color'];co.lineWidth=prop['chart.linewidth.segments'];co.beginPath();co.arc(this.centerx,this.centery,this.radius*0.85,(((prop['chart.red.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.red.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],false);if(prop['chart.segment.radius.start']>0){co.arc(this.centerx,this.centery,prop['chart.segment.radius.start'],(((prop['chart.red.end']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],(((prop['chart.red.start']-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'],true);}else{co.lineTo(this.centerx,this.centery);}\nco.closePath();co.stroke();co.fill();co.lineWidth=1;}\nif(prop['chart.border']){co.strokeStyle=prop['chart.border.color'];co.lineWidth=prop['chart.linewidth'];co.beginPath();co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,this.radius,prop['chart.angles.start'],prop['chart.angles.end'],false);co.closePath();}\nco.stroke();co.lineWidth=1;};this.drawNeedle=this.DrawNeedle=function()\n{var a=(((this.value-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'];if(typeof prop['chart.needle.image.url']==='string'&&!this.__needle_image__){var img=new Image();this.__needle_image__=img;img.src=prop['chart.needle.image.url'];img.onload=function()\n{co.save();RG.rotateCanvas(ca,this.centerx,this.centery,a);co.drawImage(this,this.centerx+prop['chart.needle.image.offsetx'],this.centery+prop['chart.needle.image.offsety']);co.restore();RG.redraw();}}else if(this.__needle_image__){co.save();RG.rotateCanvas(ca,this.centerx,this.centery,a);co.drawImage(this.__needle_image__,this.centerx+prop['chart.needle.image.offsetx'],this.centery+prop['chart.needle.image.offsety']);co.restore();}\nvar needleRadius=typeof(prop['chart.needle.radius'])=='number'?prop['chart.needle.radius']:this.radius*0.7;if(prop['chart.needle.type']==='pointer'){var r=(this.radius*0.06)>40?40:(this.radius*0.06);co.beginPath();co.fillStyle=prop['chart.needle.color'];co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,r,0,RG.TWOPI,false);co.fill();co.beginPath();co.arc(this.centerx,this.centery,r,a+RG.HALFPI,a+RG.HALFPI+0.0001,false);co.arc(this.centerx,this.centery,needleRadius,a,a+0.001,false);co.arc(this.centerx,this.centery,r,a-RG.HALFPI,a-RG.HALFPI+0.001,false);co.fill();}else{co.fillStyle='black';co.lineWidth=this.radius>=200?7:3;co.lineCap='round';co.beginPath();co.strokeStyle=prop['chart.needle.color'];if(typeof(prop['chart.needle.linewidth'])=='number')co.lineWidth=prop['chart.needle.linewidth'];co.arc(this.centerx,this.centery,needleRadius,a,a+0.001,false);co.lineTo(this.centerx,this.centery);co.stroke();if(prop['chart.needle.head']){co.fillStyle=prop['chart.needle.color'];co.beginPath();co.lineWidth=1;co.arc(this.centerx,this.centery,needleRadius+15,a,a+0.001,0);co.arc(this.centerx,this.centery,needleRadius-15,a+0.087,a+0.087999,0);co.arc(this.centerx,this.centery,needleRadius-15,a-0.087,a-0.087999,1);co.fill();}\nif(prop['chart.needle.tail']){co.beginPath();co.strokeStyle=prop['chart.needle.color'];if(typeof(prop['chart.needle.linewidth'])=='number')co.lineWidth=prop['chart.needle.linewidth'];var a=((this.value-this.min)/(this.max-this.min)*(this.properties['chart.angles.end']-this.properties['chart.angles.start']))+this.properties['chart.angles.start']+RG.PI;co.arc(this.centerx,this.centery,25,a,a+0.001,false);co.lineTo(this.centerx,this.centery);co.stroke();}\nvar r=(this.radius*0.06)>40?40:(this.radius*0.06);co.beginPath();co.fillStyle=prop['chart.centerpin.stroke'];co.arc(this.centerx,this.centery,r,0+0.001,RG.TWOPI,0);co.fill();co.fillStyle=prop['chart.centerpin.fill'];co.beginPath();co.arc(this.centerx,this.centery,r-2,0+0.001,RG.TWOPI,0);co.fill();}};this.drawLabels=this.DrawLabels=function()\n{if(!prop['chart.labels']){return;}\nvar radius=this.radius,text_size=prop['chart.text.size'],text_font=prop['chart.text.font'],units_post=prop['chart.units.post'],units_pre=prop['chart.units.pre'],centerx=this.centerx,centery=this.centery,min=this.min,max=this.max,decimals=prop['chart.scale.decimals'],numLabels=prop['chart.labels.count'],offset=prop['chart.labels.radius.offset'],specific=prop['chart.labels.specific'];if(specific){for(var i=0;i<specific.length;++i){if(typeof specific[i]==='string'||typeof specific[i]==='number'){var angle=this.getAngle((((this.max-this.min)/specific.length)/2)+(((this.max-this.min)/specific.length)*i)+this.min),angle_degrees=angle*(180/RG.PI),text=specific[i].toString(),coords=RG.getRadiusEndPoint(this.centerx,this.centery,angle,(this.radius*0.925)+offset);}else{var angle=this.getAngle(specific[i][1]),angle_degrees=angle*(180/RG.PI),text=specific[i][0].toString(),coords=RG.getRadiusEndPoint(this.centerx,this.centery,angle,(this.radius*0.925)+offset);}\nRG.text2(this,{font:text_font,size:text_size,x:coords[0],y:coords[1],text:text,halign:'center',valign:'center',angle:angle_degrees+90,bounding:false,tag:'labels-specific',color:'black'});}\nreturn;}\nco.fillStyle=prop['chart.text.color'];co.lineWidth=1;co.beginPath();for(var i=0;i<=numLabels;++i){var angle=((prop['chart.angles.end']-prop['chart.angles.start'])*(i/numLabels))+prop['chart.angles.start'];var coords=RG.getRadiusEndPoint(centerx,centery,angle+(((i==0||i==numLabels)&&prop['chart.border'])?(i==0?0.05:-0.05):0),((this.radius*0.925)-(prop['chart.text.valign']==='bottom'?15:0)+prop['chart.labels.radius.offset']));var angleStart=prop['chart.angles.start'],angleEnd=prop['chart.angles.end'],angleRange=angleEnd-angleStart,angleStart_degrees=angleStart*(180/RG.PI),angleEnd_degrees=angleEnd*(180/RG.PI),angleRange_degrees=angleRange*(180/RG.PI)\nvalign=prop['chart.text.valign'];if(prop['chart.border']){if(i==0){halign='left';}else if(i==numLabels){halign='right';}else{halign='center'}}else{halign='center';}\nvar value=((this.max-this.min)*(i/numLabels))+this.min;RG.text2(this,{font:text_font,size:text_size,x:coords[0],y:coords[1],text:RG.numberFormat(this,(value).toFixed(value===0?0:decimals),units_pre,units_post),halign:halign,valign:valign,angle:((angleRange_degrees*(1/numLabels)*i)+angleStart_degrees)-270,bounding:false,boundingFill:(i==0||i==numLabels)?'white':null,tag:'scale'});}};this.drawReadout=this.DrawReadout=function()\n{if(prop['chart.value.text']){co.fillStyle=(prop['chart.value.text.color']||prop['chart.text.color']);RG.text2(this,{font:prop['chart.value.text.font']||prop['chart.text.font'],size:prop['chart.value.text.size']||prop['chart.text.size'],italic:typeof prop['chart.value.text.italic']==='boolean'?prop['chart.value.text.italic']:prop['chart.text.italic'],bold:typeof prop['chart.value.text.bold']==='boolean'?prop['chart.value.text.bold']:prop['chart.text.bold'],x:this.centerx,y:this.centery-(prop['chart.value.text.size']||prop['chart.text.size'])-15,text:(prop['chart.value.text.units.pre']||'')\n+(this.value).toFixed(prop['chart.value.text.decimals'])\n+(prop['chart.value.text.units.post']||''),halign:'center',valign:'bottom',bounding:prop['chart.value.text.background'],boundingFill:prop['chart.value.text.background.fill'],boundingStroke:prop['chart.value.text.background.stroke'],tag:'value.text'});}};this.getShape=function(e){};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e);var angle=RG.getAngleByXY(this.centerx,this.centery,mouseXY[0],mouseXY[1]);var radius=RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1]);if(radius>this.radius){return null;}\nif(angle<RG.HALFPI){angle+=RG.TWOPI;}\nvar value=(((angle-prop['chart.angles.start'])/(prop['chart.angles.end']-prop['chart.angles.start']))*(this.max-this.min))+this.min;value=Math.max(value,this.min);value=Math.min(value,this.max);return value;};this.getObjectByXY=function(e)\n{var mouseXY=RGraph.getMouseXY(e);var radius=RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1]);if(mouseXY[0]>(this.centerx-this.radius)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+this.radius)&&radius<=this.radius){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){this.value=this.getValue(e);RG.clear(this.canvas);RG.redrawCanvas(this.canvas);RG.fireCustomEvent(this,'onadjust');}};this.getAngle=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar angle=(((value-this.min)/(this.max-this.min))*(prop['chart.angles.end']-prop['chart.angles.start']))+prop['chart.angles.start'];return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.green.color']=RG.array_clone(prop['chart.green.color']);this.original_colors['chart.yellow.color']=RG.array_clone(prop['chart.yellow.color']);this.original_colors['chart.red.color']=RG.array_clone(prop['chart.red.color']);this.original_colors['chart.colors.ranges']=RG.array_clone(prop['chart.colors.ranges']);}\nprop['chart.green.color']=this.parseSingleColorForGradient(prop['chart.green.color']);prop['chart.yellow.color']=this.parseSingleColorForGradient(prop['chart.yellow.color']);prop['chart.red.color']=this.parseSingleColorForGradient(prop['chart.red.color']);var ranges=prop['chart.colors.ranges'];if(ranges&&ranges.length){for(var i=0;i<ranges.length;++i){ranges[i][2]=this.parseSingleColorForGradient(ranges[i][2]);}}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1,radial:true});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,prop['chart.segment.radius.start'],this.centerx,this.centery,this.radius*0.85);var diff=1/(parts.length-1);for(var j=0;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this;obj.currentValue=obj.currentValue||obj.min;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var diff=obj.value-obj.currentValue;var step=diff/frames;var callback=arguments[1]||function(){};var initial=obj.currentValue;function iterator()\n{obj.value=initial+(frame++ *step);RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame<=frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.att(ca);RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.modaldialog.js",
    "content": "\nModalDialog={dialog:null,background:null,offset:50,events:[],Show:function(id,width)\n{ModalDialog.id=id;ModalDialog.width=width;ModalDialog.ShowBackground();ModalDialog.ShowDialog();window.onresize=ModalDialog.Resize;document.body.addEventListener('keydown',function(e)\n{if(e.keyCode===27){ModalDialog.hide();}},false);ModalDialog.Resize();if(typeof(ModalDialog.onmodaldialog)=='function'){ModalDialog.onmodaldialog();}\nModalDialog.FireCustomEvent('onmodaldialog');},ShowBackground:function()\n{ModalDialog.background=document.createElement('DIV');ModalDialog.background.className='ModalDialog_background';ModalDialog.background.style.position='fixed';ModalDialog.background.style.top=0;ModalDialog.background.style.left=0;ModalDialog.background.style.width=(screen.width+100)+'px';ModalDialog.background.style.height=(screen.height+100)+'px';ModalDialog.background.style.backgroundColor='rgb(204,204,204)';ModalDialog.background.style.opacity=0;ModalDialog.background.style.zIndex=3276;ModalDialog.background.style.filter=\"Alpha(opacity=50)\";document.body.appendChild(ModalDialog.background);ModalDialog.background.style.visibility='visible';},ShowDialog:function()\n{if(!ModalDialog.dialog||true){ModalDialog.dialog=document.createElement('DIV');ModalDialog.dialog.id='ModalDialog_dialog';ModalDialog.dialog.className='ModalDialog_dialog';var borderRadius='15px';ModalDialog.dialog.style.borderRadius=borderRadius;ModalDialog.dialog.style.MozBorderRadius=borderRadius;ModalDialog.dialog.style.WebkitBorderRadius=borderRadius;ModalDialog.dialog.style.boxShadow='3px 3px 3px rgba(96,96,96,0.5)';ModalDialog.dialog.style.MozBoxShadow='3px 3px 3px rgba(96,96,96,0.5)';ModalDialog.dialog.style.WebkitBoxShadow='rgba(96,96,96,0.5) 3px 3px 3px';ModalDialog.dialog.style.position='fixed';ModalDialog.dialog.style.backgroundColor='white';ModalDialog.dialog.style.width=parseInt(ModalDialog.width)+'px';ModalDialog.dialog.style.border='2px solid #999';ModalDialog.dialog.style.zIndex=32767;ModalDialog.dialog.style.padding='5px';ModalDialog.dialog.style.paddingTop='25px';ModalDialog.dialog.style.opacity=0;if(document.all){ModalDialog.dialog.style.zIndex=32767;}\nif(navigator.userAgent.indexOf('Opera')!=-1){ModalDialog.dialog.style.paddingTop='25px';}else if(navigator.userAgent.indexOf('MSIE')!=-1){ModalDialog.dialog.style.paddingTop='25px';}else if(navigator.userAgent.indexOf('Safari')!=-1){ModalDialog.dialog.style.paddingTop='25px';}\ndocument.body.appendChild(ModalDialog.dialog);var bar=document.createElement('DIV');bar.className='ModalDialog_topbar';bar.style.top=0;bar.style.left=0;bar.style.width='100%';bar.style.height='20px';bar.style.backgroundColor='#bbb';bar.style.borderBottom='2px solid #999';bar.style.position='absolute';var borderRadius='11px';bar.style.WebkitBorderTopLeftRadius=borderRadius;bar.style.WebkitBorderTopRightRadius=borderRadius;bar.style.MozBorderRadiusTopleft=borderRadius;bar.style.MozBorderRadiusTopright=borderRadius;bar.style.borderTopRightRadius=borderRadius;bar.style.borderTopLeftRadius=borderRadius;ModalDialog.dialog.appendChild(bar);var content=document.createElement('DIV');content.style.width='100%';content.style.height='100%';ModalDialog.dialog.appendChild(content);if(ModalDialog.id.toLowerCase().substring(0,7)=='string:'){content.innerHTML=ModalDialog.id.substring(7);}else{content.innerHTML=document.getElementById(ModalDialog.id).innerHTML;}\nModalDialog.dialog.style.left=(document.body.offsetWidth/2)-(ModalDialog.dialog.offsetWidth/2)+'px';ModalDialog.dialog.style.top='30%';}\nModalDialog.dialog.style.visibility='visible';setTimeout('ModalDialog.dialog.style.opacity = 0.2',50);setTimeout('ModalDialog.dialog.style.opacity = 0.4',100);setTimeout('ModalDialog.dialog.style.opacity = 0.6',150);setTimeout('ModalDialog.dialog.style.opacity = 0.8',200);setTimeout('ModalDialog.dialog.style.opacity = 1',250);setTimeout('ModalDialog.background.style.opacity = 0.1',50);setTimeout('ModalDialog.background.style.opacity = 0.2',100);setTimeout('ModalDialog.background.style.opacity = 0.3',150);setTimeout('ModalDialog.background.style.opacity = 0.4',200);setTimeout('ModalDialog.background.style.opacity = 0.5',250);},Close:function()\n{if(ModalDialog.dialog){if(document.getElementById(ModalDialog.dialog.id)){document.body.removeChild(ModalDialog.dialog);}\nModalDialog.dialog.style.visibility='hidden';ModalDialog.dialog.style.opacity=0;}\nif(ModalDialog.background){ModalDialog.background.style.visibility='hidden';ModalDialog.background.style.opacity=0;if(document.getElementById(ModalDialog.background.id)){document.body.removeChild(ModalDialog.background);}}},Resize:function()\n{if(ModalDialog.dialog){ModalDialog.dialog.style.left=(document.body.offsetWidth/2)-(ModalDialog.dialog.offsetWidth/2)+'px';}\nModalDialog.background.style.width='2500px';ModalDialog.background.style.height='2500px';},AddCustomEventListener:function(name,func)\n{if(typeof(ModalDialog.events)=='undefined'){ModalDialog.events=[];}\nModalDialog.events.push([name,func]);},FireCustomEvent:function(name)\n{for(var i=0;i<ModalDialog.events.length;++i){if(typeof(ModalDialog.events[i][0])=='string'&&ModalDialog.events[i][0]==name&&typeof(ModalDialog.events[i][1])=='function'){ModalDialog.events[i][1]();}}},isIE8:function()\n{return document.all&&(navigator.userAgent.indexOf('MSIE 8')>0);}};ModalDialog.show=ModalDialog.Show;ModalDialog.draw=ModalDialog.Show;ModalDialog.Hide=ModalDialog.Close;ModalDialog.hide=ModalDialog.Close;ModalDialog.close=ModalDialog.Close;for(i in ModalDialog){if(typeof ModalDialog[i]==='function'){ModalDialog[i.toLowerCase()]=ModalDialog[i]}}"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.odo.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Odometer=function(conf)\n{if(typeof conf==='object'&&typeof conf.value!=='undefined'&&typeof conf.id==='string'){var id=conf.id\nvar canvas=document.getElementById(id);var min=conf.min;var max=conf.max;var value=conf.value;var parseConfObjectForOptions=true;}else{var id=conf;var canvas=document.getElementById(id);var min=arguments[1];var max=arguments[2];var value=arguments[3];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.type='odo';this.isRGraph=true;this.min=RGraph.stringsToNumbers(min);this.max=RGraph.stringsToNumbers(max);this.value=RGraph.stringsToNumbers(value);this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.border':'black','chart.background.color':'#eee','chart.background.lines.color':'#ddd','chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.value.text':false,'chart.value.text.decimals':0,'chart.needle.color':'black','chart.needle.width':2,'chart.needle.head':true,'chart.needle.tail':true,'chart.needle.type':'pointer','chart.needle.extra':[],'chart.needle.triangle.border':'#aaa','chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':false,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.green.max':max*0.75,'chart.red.min':max*0.9,'chart.green.color':'Gradient(white:#0c0)','chart.yellow.color':'Gradient(white:#ff0)','chart.red.color':'Gradient(white:#f00)','chart.label.area':35,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.font':null,'chart.title.bold':true,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.contextmenu':null,'chart.linewidth':1,'chart.shadow.inner':false,'chart.shadow.inner.color':'black','chart.shadow.inner.offsetx':3,'chart.shadow.inner.offsety':3,'chart.shadow.inner.blur':6,'chart.shadow.outer':false,'chart.shadow.outer.color':'black','chart.shadow.outer.offsetx':3,'chart.shadow.outer.offsety':3,'chart.shadow.outer.blur':6,'chart.annotatable':false,'chart.annotate.color':'black','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.units.pre':'','chart.units.post':'','chart.border':false,'chart.border.color1':'#BEBCB0','chart.border.color2':'#F0EFEA','chart.border.color3':'#BEBCB0','chart.tickmarks':true,'chart.tickmarks.highlighted':false,'chart.tickmarks.big.color':'#999','chart.zerostart':false,'chart.labels':null,'chart.units.pre':'','chart.units.post':'','chart.value.units.pre':'','chart.value.units.post':'','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.halign':'right','chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.text.size':10,'chart.key.colors':null,'chart.key.text.color':'black','chart.adjustable':false,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name,value)\n{var value=arguments[1]||null;if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.needle.style'){alert('[RGRAPH] The RGraph property chart.needle.style has changed to chart.needle.color');}\nif(name=='chart.needle.thickness'){name='chart.needle.width';}\nif(name=='chart.value'){this.value=value;return;}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.value'){return this.value;}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.currentValue=this.value;if(this.value>this.max){this.value=this.max;}\nif(this.value<this.min){this.value=this.min;}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=Math.min((ca.width-this.gutterLeft-this.gutterRight)/2,(ca.height-this.gutterTop-this.gutterBottom)/2)\n-(prop['chart.border']?25:0);this.diameter=2*this.radius;this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.range=this.max-this.min;this.coordsText=[];if(prop['chart.key']&&prop['chart.key'].length>0&&ca.width>ca.height)this.centerx=5+this.radius;if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number'){this.radius=prop['chart.radius'];if(prop['chart.border']){this.radius-=25;}}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nco.lineWidth=prop['chart.linewidth'];this.DrawBackground();this.DrawLabels();this.DrawNeedle(this.value,prop['chart.needle.color']);if(prop['chart.needle.extra'].length>0){for(var i=0;i<prop['chart.needle.extra'].length;++i){var needle=prop['chart.needle.extra'][i];this.DrawNeedle(needle[0],needle[1],needle[2]);}}\nif(prop['chart.key']&&prop['chart.key'].length>0){var colors=[prop['chart.needle.color']];if(prop['chart.needle.extra'].length>0){for(var i=0;i<prop['chart.needle.extra'].length;++i){var needle=prop['chart.needle.extra'][i];colors.push(needle[1]);}}\nRG.DrawKey(this,prop['chart.key'],colors);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawBackground=this.DrawBackground=function()\n{co.beginPath();if(prop['chart.shadow.outer']){RG.setShadow(this,prop['chart.shadow.outer.color'],prop['chart.shadow.outer.offsetx'],prop['chart.shadow.outer.offsety'],prop['chart.shadow.outer.blur']);}\nvar backgroundColor=prop['chart.background.color'];co.fillStyle=backgroundColor;co.arc(this.centerx,this.centery,this.radius,0.0001,RG.TWOPI,false);co.fill();RG.noShadow(this);co.strokeStyle='#666';co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,false);co.fillStyle=backgroundColor;co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,false);co.fill();if(prop['chart.tickmarks']){co.beginPath();co.strokeStyle='#bbb';for(var i=0;i<=360;i+=3){co.arc(this.centerx,this.centery,this.radius,0,i/57.3,false);co.lineTo(this.centerx,this.centery);}\nco.stroke();}\nco.beginPath();co.lineWidth=1;co.strokeStyle='black';co.fillStyle=backgroundColor;co.strokeStyle=backgroundColor;co.arc(this.centerx,this.centery,this.radius-5,0,RG.TWOPI,false);co.fill();co.stroke();co.beginPath();co.strokeStyle=prop['chart.background.lines.color'];for(var i=0;i<360;i+=18){co.arc(this.centerx,this.centery,this.radius,0,RG.degrees2Radians(i),false);co.lineTo(this.centerx,this.centery);}\nco.stroke();co.beginPath();co.strokeStyle=prop['chart.background.border'];co.arc(this.centerx,this.centery,this.radius,0,RG.TWOPI,false);co.stroke();if(prop['chart.shadow.inner']){co.beginPath();RG.SetShadow(this,prop['chart.shadow.inner.color'],prop['chart.shadow.inner.offsetx'],prop['chart.shadow.inner.offsety'],prop['chart.shadow.inner.blur']);co.arc(this.centerx,this.centery,this.radius-prop['chart.label.area'],0,RG.TWOPI,0);co.fill();co.stroke();RG.NoShadow(this);}\nvar greengrad=prop['chart.green.color'];if(prop['chart.tickmarks.highlighted']){co.beginPath();co.lineWidth=5;co.strokeStyle=greengrad;co.arc(this.centerx,this.centery,this.radius-2.5,-1*RG.HALFPI,(((prop['chart.green.max']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,0);co.stroke();co.lineWidth=1;}\nco.beginPath();co.fillStyle=greengrad;co.arc(this.centerx,this.centery,this.radius-prop['chart.label.area'],0-RG.HALFPI,(((prop['chart.green.max']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,false);co.lineTo(this.centerx,this.centery);co.closePath();co.fill();var yellowgrad=prop['chart.yellow.color'];if(prop['chart.tickmarks.highlighted']){co.beginPath();co.lineWidth=5;co.strokeStyle=yellowgrad;co.arc(this.centerx,this.centery,this.radius-2.5,(((prop['chart.green.max']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,(((prop['chart.red.min']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,0);co.stroke();co.lineWidth=1;}\nco.beginPath();co.fillStyle=yellowgrad;co.arc(this.centerx,this.centery,this.radius-prop['chart.label.area'],(((prop['chart.green.max']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,(((prop['chart.red.min']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,false);co.lineTo(this.centerx,this.centery);co.closePath();co.fill();var redgrad=prop['chart.red.color'];if(prop['chart.tickmarks.highlighted']){co.beginPath();co.lineWidth=5;co.strokeStyle=redgrad;co.arc(this.centerx,this.centery,this.radius-2.5,(((prop['chart.red.min']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,RG.TWOPI-RG.HALFPI,0);co.stroke();co.lineWidth=1;}\nco.beginPath();co.fillStyle=redgrad;co.strokeStyle=redgrad;co.arc(this.centerx,this.centery,this.radius-prop['chart.label.area'],(((prop['chart.red.min']-this.min)/(this.max-this.min))*RG.TWOPI)-RG.HALFPI,RG.TWOPI-RG.HALFPI,false);co.lineTo(this.centerx,this.centery);co.closePath();co.fill();if(prop['chart.border']){var grad=co.createRadialGradient(this.centerx,this.centery,this.radius,this.centerx,this.centery,this.radius+20);grad.addColorStop(0,prop['chart.border.color1']);grad.addColorStop(0.5,prop['chart.border.color2']);grad.addColorStop(1,prop['chart.border.color3']);co.beginPath();co.fillStyle=grad;co.strokeStyle='rgba(0,0,0,0)'\nco.lineWidth=0.001;co.arc(this.centerx,this.centery,this.radius+20,0,RG.TWOPI,0);co.arc(this.centerx,this.centery,this.radius-2,RG.TWOPI,0,1);co.fill();}\nco.lineWidth=prop['chart.linewidth'];if(prop['chart.title']){RG.DrawTitle(this,prop['chart.title'],this.centery-this.radius,null,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);}\nif(!prop['chart.tickmarks.highlighted']){for(var i=18;i<=360;i+=36){co.beginPath();co.strokeStyle=prop['chart.tickmarks.big.color'];co.lineWidth=2;co.arc(this.centerx,this.centery,this.radius-1,RG.degrees2Radians(i),RG.degrees2Radians(i+0.01),false);co.arc(this.centerx,this.centery,this.radius-7,RG.degrees2Radians(i),RG.degrees2Radians(i+0.01),false);co.stroke();}}};this.drawNeedle=this.DrawNeedle=function(value,color)\n{var length=arguments[2]?arguments[2]:this.radius-prop['chart.label.area'];co.fillStyle='#999';co.beginPath();co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,10,0,RG.TWOPI,false);co.fill();co.closePath();co.fill();co.fillStyle=color\nco.strokeStyle='#666';co.beginPath();co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,8,0,RG.TWOPI,false);co.fill();co.closePath();co.stroke();co.fill();if(prop['chart.needle.type']=='pointer'){co.strokeStyle=color;co.lineWidth=prop['chart.needle.width'];co.lineCap='round';co.lineJoin='round';co.beginPath();co.beginPath();co.moveTo(this.centerx,this.centery);if(prop['chart.needle.tail']){co.arc(this.centerx,this.centery,20,(((value/this.range)*360)+90)/(180/RG.PI),(((value/this.range)*360)+90+0.01)/(180/RG.PI),false);}\nco.arc(this.centerx,this.centery,length-10,(((value/this.range)*360)-90)/(180/RG.PI),(((value/this.range)*360)-90+0.1)/(180/RG.PI),false);co.closePath();}else if(prop['chart.needle.type']=='triangle'){co.lineWidth=0.01;co.lineEnd='square';co.lineJoin='miter';co.beginPath();co.fillStyle=prop['chart.needle.triangle.border'];co.arc(this.centerx,this.centery,11,(((value/this.range)*360))/57.3,((((value/this.range)*360))+0.01)/57.3,0);co.arc(this.centerx,this.centery,11,(((value/this.range)*360)+180)/57.3,((((value/this.range)*360)+180)+0.01)/57.3,0);co.arc(this.centerx,this.centery,length-5,(((value/this.range)*360)-90)/57.3,((((value/this.range)*360)-90)/57.3)+0.01,0);co.closePath();co.fill();co.beginPath();co.arc(this.centerx,this.centery,15,0,RG.TWOPI,0);co.closePath();co.fill();co.beginPath();co.strokeStyle='black';co.fillStyle=color;co.arc(this.centerx,this.centery,7,(((value/this.range)*360))/57.3,((((value/this.range)*360))+0.01)/57.3,0);co.arc(this.centerx,this.centery,7,(((value/this.range)*360)+180)/57.3,((((value/this.range)*360)+180)+0.01)/57.3,0);co.arc(this.centerx,this.centery,length-13,(((value/this.range)*360)-90)/57.3,((((value/this.range)*360)-90)/57.3)+0.01,0);co.closePath();co.stroke();co.fill();co.beginPath();co.arc(this.centerx,this.centery,7,0,RG.TWOPI,0);co.closePath();co.fill();}\nco.stroke();co.fill();co.beginPath();co.fillStyle=color;co.arc(this.centerx,this.centery,prop['chart.needle.type']=='pointer'?7:12,0.01,RG.TWOPI,false);co.fill();if(prop['chart.needle.head']&&prop['chart.needle.type']=='pointer'){co.lineWidth=1;co.fillStyle=color;co.lineJoin='miter';co.lineCap='butt';co.beginPath();co.arc(this.centerx,this.centery,length-5,(((value/this.range)*360)-90)/57.3,(((value/this.range)*360)-90+0.1)/57.3,false);co.arc(this.centerx,this.centery,length-20,RG.degrees2Radians(((value/this.range)*360)-(length<60?80:85)),RG.degrees2Radians(((value/this.range)*360)-(length<60?100:95)),1);co.closePath();co.fill();}\nco.beginPath();co.fillStyle='gray';co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,2,0,6.2795,false);co.closePath();co.fill();};this.drawLabels=this.DrawLabels=function()\n{var size=prop['chart.text.size'];var font=prop['chart.text.font'];var centerx=this.centerx;var centery=this.centery;var r=this.radius-(prop['chart.label.area']/2);var start=this.min;var end=this.max;var decimals=prop['chart.scale.decimals'];var labels=prop['chart.labels'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];co.beginPath();co.fillStyle=prop['chart.text.color'];if(labels){for(var i=0;i<labels.length;++i){RG.Text2(this,{'font':font,'size':size,'x':centerx+(Math.cos(((i/labels.length)*RG.TWOPI)-RG.HALFPI)*(this.radius-(prop['chart.label.area']/2))),'y':centery+(Math.sin(((i/labels.length)*RG.TWOPI)-RG.HALFPI)*(this.radius-(prop['chart.label.area']/2))),'text':String(labels[i]),'valign':'center','halign':'center','tag':'labels'});}}else{RG.Text2(this,{'font':font,'size':size,'x':centerx+(0.588*r),'y':centery-(0.809*r),'text':RG.number_format(this,(((end-start)*(1/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':36,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx+(0.951*r),'y':centery-(0.309*r),'text':RG.number_format(this,(((end-start)*(2/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':72,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx+(0.949*r),'y':centery+(0.31*r),'text':RG.number_format(this,(((end-start)*(3/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':108,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx+(0.588*r),'y':centery+(0.809*r),'text':RG.number_format(this,(((end-start)*(4/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':144,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx,'y':centery+r,'text':RG.number_format(this,(((end-start)*(5/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':180,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx-(0.588*r),'y':centery+(0.809*r),'text':RG.number_format(this,(((end-start)*(6/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':216,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx-(0.949*r),'y':centery+(0.300*r),'text':RG.number_format(this,(((end-start)*(7/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':252,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx-(0.951*r),'y':centery-(0.309*r),'text':RG.number_format(this,(((end-start)*(8/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':288,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx-(0.588*r),'y':centery-(0.809*r),'text':RG.number_format(this,(((end-start)*(9/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','angle':324,'tag':'scale'});RG.Text2(this,{'font':font,'size':size,'x':centerx,'y':centery-r,'text':prop['chart.zerostart']?RG.number_format(this,this.min.toFixed(decimals),units_pre,units_post):RG.number_format(this,(((end-start)*(10/10))+start).toFixed(decimals),units_pre,units_post),'halign':'center','valign':'center','tag':'scale'});}\nco.fill();if(prop['chart.value.text']){co.strokeStyle='black';RG.Text2(this,{'font':font,'size':size+2,'x':centerx,'y':centery+size+15,'text':String(prop['chart.value.units.pre']+this.value.toFixed(prop['chart.value.text.decimals'])+prop['chart.value.units.post']),'halign':'center','valign':'center','bounding':true,'boundingFill':'white','tag':'value.text'});}};this.getShape=function(e){};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e)\nvar angle=RG.getAngleByXY(this.centerx,this.centery,mouseXY[0],mouseXY[1]);angle+=RG.HALFPI;if(mouseXY[0]>=this.centerx&&mouseXY[1]<=this.centery){angle-=RG.TWOPI;}\nvar value=((angle/RG.TWOPI)*(this.max-this.min))+this.min;return value;};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);var radius=RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1]);if(mouseXY[0]>(this.centerx-this.radius)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+this.radius)&&radius<=this.radius){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){this.value=this.getValue(e);RG.clear(ca);RG.redrawCanvas(ca);RG.fireCustomEvent(this,'onadjust');}};this.getAngle=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar angle=(((value-this.min)/(this.max-this.min))*RG.TWOPI);angle-=RG.HALFPI;return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.green.color']=RG.array_clone(prop['chart.green.color']);this.original_colors['chart.yellow.color']=RG.array_clone(prop['chart.yellow.color']);this.original_colors['chart.red.color']=RG.array_clone(prop['chart.red.color']);}\nprop['chart.green.color']=this.parseSingleColorForGradient(prop['chart.green.color']);prop['chart.yellow.color']=this.parseSingleColorForGradient(prop['chart.yellow.color']);prop['chart.red.color']=this.parseSingleColorForGradient(prop['chart.red.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||30;var frame=0;var current=obj.currentValue||0;var origValue=Number(obj.currentValue);var newValue=obj.value;var diff=newValue-origValue;var step=(diff/frames);var callback=arguments[1]||function(){};function iterator()\n{obj.value=origValue+(frame*step);RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.att(ca);RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.pie.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Pie=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var id=conf.id,canvas=document.getElementById(id),data=conf.data,parseConfObjectForOptions=true;}else{var id=conf,canvas=document.getElementById(id),data=arguments[1];}\nthis.id=id;this.canvas=canvas;this.context=this.canvas.getContext?this.canvas.getContext(\"2d\",{alpha:(typeof id==='object'&&id.alpha===false)?false:true}):null;this.canvas.__object__=this;this.total=0;this.subTotal=0;this.angles=[];this.data=data;this.properties=[];this.type='pie';this.isRGraph=true;this.coords=[];this.coords.key=[];this.coordsSticks=[];this.coordsText=[];this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.original_colors=[];this.firstDraw=true;this.exploding=null;for(var i=0;i<this.data.length;++i){if(typeof this.data[i]==='string'){this.data[i]=parseFloat(this.data[i]);}}\nthis.properties={'chart.centerx.adjust':0,'chart.centery.adjust':0,'chart.colors':['red','#ccc','#cfc','blue','pink','yellow','black','orange','cyan','purple','#78CAEA','#E284E9','white','blue','#9E7BF6'],'chart.strokestyle':'white','chart.linewidth':3,'chart.labels':[],'chart.labels.bold':false,'chart.labels.sticks':false,'chart.labels.sticks.length':7,'chart.labels.sticks.colors':null,'chart.labels.sticks.usecolors':false,'chart.labels.sticks.linewidth':1,'chart.labels.sticks.hlength':5,'chart.labels.sticks.list':false,'chart.labels.ingraph':null,'chart.labels.ingraph.color':null,'chart.labels.ingraph.font':null,'chart.labels.ingraph.size':null,'chart.labels.ingraph.bounding':true,'chart.labels.ingraph.bounding.fill':'white','chart.labels.ingraph.specific':null,'chart.labels.ingraph.units.pre':'','chart.labels.ingraph.units.post':'','chart.labels.ingraph.radius':null,'chart.labels.center':null,'chart.labels.center.size':26,'chart.labels.center.font':'Arial, Verdana, sans-serif','chart.labels.center.color':'black','chart.labels.center.italic':false,'chart.labels.center.bold':false,'chart.labels.center.units.pre':'','chart.labels.center.units.post':'','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':0.5,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.shadow':true,'chart.shadow.color':'#aaa','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.event':'onclick','chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.highlight.style':'2d','chart.highlight.style.twod.fill':'rgba(255,255,255,0.7)','chart.highlight.style.twod.stroke':'rgba(255,255,255,0.7)','chart.highlight.style.outline.width':null,'chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.border':false,'chart.border.color':'rgba(255,255,255,0.5)','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.variant':'pie','chart.variant.donut.width':null,'chart.variant.threed.depth':20,'chart.exploded':[],'chart.effect.roundrobin.multiplier':1,'chart.events.click':null,'chart.events.mousemove':null,'chart.centerpin':null,'chart.centerpin.fill':'gray','chart.centerpin.stroke':'white','chart.origin':0-(Math.PI/2),'chart.events':true,'chart.labels.colors':[],'chart.clearto':'rgba(0,0,0,0)'}\nfor(var i=0,len=data.length;i<len;i++){this.total+=data[i];this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.highlight.style.twod.color'){name='chart.highlight.style.twod.fill';}\nif(name=='chart.labels.spaced'){name='chart.labels.sticks.list';}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.highlight.style.twod.color'){name='chart.highlight.style.twod.fill';}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=this.getRadius();this.centerx=(this.graph.width/2)+this.gutterLeft+prop['chart.centerx.adjust'];this.centery=(this.graph.height/2)+this.gutterTop+prop['chart.centery.adjust'];this.subTotal=this.properties['chart.origin'];this.angles=[];this.coordsText=[];if(typeof prop['chart.radius']==='number')this.radius=prop['chart.radius'];if(typeof prop['chart.centerx']==='number')this.centerx=prop['chart.centerx'];if(typeof prop['chart.centery']==='number')this.centery=prop['chart.centery'];if(this.radius<=0){return;}\nif(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nif(prop['chart.labels.colors'].length<prop['chart.labels'].length){while(prop['chart.labels.colors'].length<prop['chart.labels'].length){prop['chart.labels.colors'].push(prop['chart.labels.colors'][prop['chart.labels.colors'].length-1]);}}else{if(typeof prop['chart.labels.colors']==='undefined'){prop['chart.labels.colors']=[];}\nwhile(prop['chart.labels.colors'].length<prop['chart.labels'].length){prop['chart.labels.colors'].push(prop['chart.text.color']);}}\nif(prop['chart.variant'].indexOf('3d')>0){return this.draw3d();}\nRG.DrawTitle(this,prop['chart.title'],(ca.height/2)-this.radius-5,this.centerx,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);this.total=RG.array_sum(this.data);var tot=this.total;var data=this.data;for(var i=0,len=this.data.length;i<len;i++){var angle=((data[i]/tot)*RG.TWOPI);this.DrawSegment(angle,prop['chart.colors'][i],i==(len-1),i);}\nRG.NoShadow(this);if(prop['chart.linewidth']>0){this.DrawBorders();}\nvar len=this.angles.length;var r=this.radius;for(var action=0;action<2;action+=1){for(var i=0;i<len;i++){co.beginPath();var segment=this.angles[i];if(action===1){co.strokeStyle=typeof(prop['chart.strokestyle'])=='object'?prop['chart.strokestyle'][i]:prop['chart.strokestyle'];}\nprop['chart.colors'][i]?co.fillStyle=prop['chart.colors'][i]:null;co.lineJoin='round';co.arc(segment[2],segment[3],r,(segment[0]),(segment[1]),false);if(prop['chart.variant']=='donut'){co.arc(segment[2],segment[3],typeof(prop['chart.variant.donut.width'])=='number'?r-prop['chart.variant.donut.width']:r/2,(segment[1]),(segment[0]),true);}else{co.lineTo(segment[2],segment[3]);}\nco.closePath();action===0?co.fill():co.stroke();}}\nif(prop['chart.labels.sticks']){this.DrawSticks();var strokeStyle=prop['chart.strokestyle'];}\nif(prop['chart.labels']){this.DrawLabels();}\nif(prop['chart.centerpin']){this.DrawCenterpin();}\nif(prop['chart.labels.ingraph']){this.DrawInGraphLabels();}\nif(!RG.isNull(prop['chart.labels.center'])){this.drawCenterLabel(prop['chart.labels.center']);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.border']){co.beginPath();co.lineWidth=5;co.strokeStyle=prop['chart.border.color'];co.arc(this.centerx,this.centery,this.radius-2,0,RG.TWOPI,0);co.stroke();}\nif(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nRG.NoShadow(this);if(prop['chart.resizable']){RG.AllowResizing(this);}\nif(prop['chart.events']==true){RG.InstallEventListeners(this);}\nif(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawSegment=this.DrawSegment=function(radians,color,last,index)\n{if(RGraph.ISOLD&&radians==RG.TWOPI){radians-=0.0001;}else if(RGraph.ISOLD&&radians==0){radians=0.001;}\nvar subTotal=this.subTotal;radians=radians*prop['chart.effect.roundrobin.multiplier'];co.beginPath();color?co.fillStyle=color:null;co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=0;if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nif((typeof(prop['chart.exploded'])=='object'&&prop['chart.exploded'][index]>0)||typeof(prop['chart.exploded'])=='number'){var explosion=typeof(prop['chart.exploded'])=='number'?prop['chart.exploded']:prop['chart.exploded'][index];var x=0;var y=0;var h=explosion;var t=subTotal+(radians/2);var x=(Math.cos(t)*explosion);var y=(Math.sin(t)*explosion);var r=this.radius;co.moveTo(this.centerx+x,this.centery+y);}else{var x=0;var y=0;var r=this.radius;}\nvar startAngle=subTotal;var endAngle=((subTotal+radians));co.arc(this.centerx+x,this.centery+y,r,startAngle,endAngle,0);if(prop['chart.variant']=='donut'){co.arc(this.centerx+x,this.centery+y,typeof(prop['chart.variant.donut.width'])=='number'?r-prop['chart.variant.donut.width']:r/2,endAngle,startAngle,true);}else{co.lineTo(this.centerx+x,this.centery+y);}\nco.closePath();this.angles.push([subTotal,subTotal+radians,this.centerx+x,this.centery+y]);co.fill();this.subTotal+=radians;};this.drawLabels=this.DrawLabels=function()\n{if(prop['chart.labels'].length&&prop['chart.labels.sticks.list']){return this.drawLabelsList();}\nvar hAlignment='left',vAlignment='center',labels=prop['chart.labels'],context=co,font=prop['chart.text.font'],bold=prop['chart.labels.bold'],text_size=prop['chart.text.size'],cx=this.centerx,cy=this.centery,r=this.radius;RG.noShadow(this);co.fillStyle='black';co.beginPath();if(labels&&labels.length){for(i=0;i<this.angles.length;++i){var segment=this.angles[i];if(typeof labels[i]!='string'&&typeof labels[i]!='number'){continue;}\nco.moveTo(cx,cy);var a=segment[0]+((segment[1]-segment[0])/2),angle=((segment[1]-segment[0])/2)+segment[0];if(typeof prop['chart.exploded']==='object'&&prop['chart.exploded'][i]||typeof prop['chart.exploded']=='number'){var t=((segment[1]-segment[0])/2),seperation=typeof(prop['chart.exploded'])=='number'?prop['chart.exploded']:prop['chart.exploded'][i];var explosion_offsetx=(Math.cos(angle)*seperation),explosion_offsety=(Math.sin(angle)*seperation);}else{var explosion_offsetx=0,explosion_offsety=0;}\nif(prop['chart.labels.sticks']){explosion_offsetx+=(ma.cos(angle)*(typeof prop['chart.labels.sticks.length']==='object'?prop['chart.labels.sticks.length'][i]:prop['chart.labels.sticks.length']));explosion_offsety+=(ma.sin(angle)*(typeof prop['chart.labels.sticks.length']==='object'?prop['chart.labels.sticks.length'][i]:prop['chart.labels.sticks.length']));}\nvar x=cx+explosion_offsetx+((r+10)*Math.cos(a))+(prop['chart.labels.sticks']?(a<RG.HALFPI||a>(RG.TWOPI+RG.HALFPI)?2:-2):0),y=cy+explosion_offsety+(((r+10)*Math.sin(a)));if(this.coordsSticks&&this.coordsSticks[i]){var x=this.coordsSticks[i][4][0]+(x<cx?-5:5),y=this.coordsSticks[i][4][1];}\nvAlignment='center';hAlignment=x<cx?'right':'left';co.fillStyle=prop['chart.text.color'];if(typeof prop['chart.labels.colors']==='object'&&prop['chart.labels.colors']&&prop['chart.labels.colors'][i]){co.fillStyle=prop['chart.labels.colors'][i];}\nRG.text2(this,{font:font,size:text_size,x:x,y:y,text:labels[i],valign:vAlignment,halign:hAlignment,tag:'labels',bold:bold,color:prop['chart.labels.sticks.usecolors']?prop['chart.colors'][i]:'black'});}\nco.fill();}};this.drawLabelsList=function()\n{var segment=this.angles[i],labels=prop['chart.labels'],labels_right=[],labels_left=[],text_font=prop['chart.text.font'],text_size=prop['chart.text.size'],text_color=prop['chart.text.color'],left=[],right=[],centerx=this.centerx,centery=this.centery,radius=this.radius,offset=50\nfor(var i=0;i<this.angles.length;++i){var angle=this.angles[i][0]+((this.angles[i][1]-this.angles[i][0])/2),endpoint_inner=RG.getRadiusEndPoint(centerx,centery,angle,radius+5),endpoint_outer=RG.getRadiusEndPoint(centerx,centery,angle,radius+50),explosion=[(typeof prop['chart.exploded']==='number'?prop['chart.exploded']:prop['chart.exploded'][i]),(ma.cos(angle)*(typeof prop['chart.exploded']==='number'?prop['chart.exploded']:prop['chart.exploded'][i])),(ma.sin(angle)*(typeof prop['chart.exploded']==='number'?prop['chart.exploded']:prop['chart.exploded'][i]))]\nif(typeof prop['chart.labels.sticks.colors']==='object'&&prop['chart.labels.sticks.colors']&&prop['chart.labels.sticks.colors'][i]){var color=prop['chart.labels.sticks.colors'][i];}else if(prop['chart.labels.sticks.usecolors']&&prop['chart.colors'][i]){var color=prop['chart.colors'][i];}else{var color=prop['chart.text.color'];}\nif(angle>(-1*RG.HALFPI)&&angle<RG.HALFPI){labels_right.push([i,angle,labels[i]?labels[i]:'',endpoint_inner,endpoint_outer,color,RG.arrayClone(explosion)]);}else{labels_left.push([i,angle,labels[i]?labels[i]:'',endpoint_inner,endpoint_outer,color,RG.arrayClone(explosion)]);}}\nvar vspace_right=(ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'])/labels_right.length\nfor(var i=0,y=(prop['chart.gutter.top']+(vspace_right/2));i<labels_right.length;y+=vspace_right,i++){if(labels_right[i][2]){var x=this.centerx+this.radius+offset,idx=labels_right[i][0],explosionX=labels_right[i][6][0]?labels_right[i][6][1]:0,explosionY=labels_right[i][6][0]?labels_right[i][6][2]:0\nvar ret=RG.text2(this,{font:text_font,size:text_size,x:x+explosionX,y:y+explosionY,text:labels_right[i][2],valign:'center',halign:'left',tag:'labels',color:labels_right[i][5]});if(ret&&ret.node){ret.node.__index__=labels_right[i][0];}\npa2(co,'lc round lw % b m % % qc % % % % s %',prop['chart.labels.sticks.linewidth'],labels_right[i][3][0]+explosionX,labels_right[i][3][1]+explosionY,labels_right[i][4][0]+explosionX,labels_right[i][4][1]+explosionY,ret.x-5,ret.y+(ret.height/2),labels_right[i][5]);}}\nvar vspace_left=(ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'])/labels_left.length\nfor(var i=(labels_left.length-1),y=(prop['chart.gutter.top']+(vspace_left/2));i>=0;y+=vspace_left,i--){if(labels_left[i][2]){var x=this.centerx-this.radius-offset,idx=labels_left[i][0],explosionX=labels_left[i][6][0]?labels_left[i][6][1]:0,explosionY=labels_left[i][6][0]?labels_left[i][6][2]:0\nvar ret=RG.text2(this,{font:text_font,size:text_size,x:x+explosionX,y:y+explosionY,text:labels_left[i][2],valign:'center',halign:'right',tag:'labels',color:labels_left[i][5]});if(ret&&ret.node){ret.node.__index__=labels_left[i][0];}\npa2(co,'lw % b m % % qc % % % % s %',prop['chart.labels.sticks.linewidth'],labels_left[i][3][0]+explosionX,labels_left[i][3][1]+explosionY,this.centerx-this.radius-25+explosionX,ma.round(labels_left[i][4][1]+explosionY),ret.x+5+ret.width,ret.y+(ret.height/2),labels_left[i][5]);}}};this.drawSticks=this.DrawSticks=function()\n{var offset=prop['chart.linewidth']/2,exploded=prop['chart.exploded'],sticks=prop['chart.labels.sticks'],colors=prop['chart.colors'],cx=this.centerx,cy=this.centery,radius=this.radius,points=[],linewidth=prop['chart.labels.sticks.linewidth']\nfor(var i=0,len=this.angles.length;i<len;++i){var segment=this.angles[i];if(typeof sticks==='object'&&!sticks[i]){continue;}\nvar radians=segment[1]-segment[0];co.beginPath();co.strokeStyle=typeof prop['chart.labels.sticks.colors']==='string'?prop['chart.labels.sticks.colors']:(!RG.isNull(prop['chart.labels.sticks.colors'])?prop['chart.labels.sticks.colors'][i]:'gray');co.lineWidth=linewidth;if(typeof prop['chart.labels.sticks.color']==='string'){co.strokeStyle=prop['chart.labels.sticks.color'];}\nif(prop['chart.labels.sticks.usecolors']){co.strokeStyle=prop['chart.colors'][i];}\nvar midpoint=(segment[0]+(radians/2));if(typeof exploded==='object'&&exploded[i]){var extra=exploded[i];}else if(typeof exploded==='number'){var extra=exploded;}else{var extra=0;}\nvar stickLength=typeof prop['chart.labels.sticks.length']==='object'?prop['chart.labels.sticks.length'][i]:prop['chart.labels.sticks.length'];points[0]=RG.getRadiusEndPoint(cx,cy,midpoint,radius+extra+offset);points[1]=RG.getRadiusEndPoint(cx,cy,midpoint,radius+stickLength+extra-5);points[2]=RG.getRadiusEndPoint(cx,cy,midpoint,radius+stickLength+extra);points[3]=RG.getRadiusEndPoint(cx,cy,midpoint,radius+stickLength+extra);points[3][0]+=(points[3][0]>cx?5:-5);points[4]=[points[2][0]+(points[2][0]>cx?5+prop['chart.labels.sticks.hlength']:-5-prop['chart.labels.sticks.hlength']),points[2][1]];co.moveTo(points[0][0],points[0][1]);co.quadraticCurveTo(points[2][0],points[2][1],points[4][0],points[4][1]);co.stroke();this.coordsSticks[i]=[points[0],points[1],points[2],points[3],points[4]];}};this.getShape=this.getSegment=function(e)\n{RG.FixEventObject(e);var accuracy=arguments[1]?arguments[1]:0;var canvas=ca;var context=co;var mouseCoords=RG.getMouseXY(e);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];var r=this.radius;var angles=this.angles;var ret=[];for(var i=0,len=angles.length;i<len;++i){co.beginPath();co.strokeStyle='rgba(0,0,0,0)';co.arc(angles[i][2],angles[i][3],this.radius,angles[i][0],angles[i][1],false);if(this.type=='pie'&&prop['chart.variant']=='donut'){co.arc(angles[i][2],angles[i][3],(typeof(prop['chart.variant.donut.width'])=='number'?this.radius-prop['chart.variant.donut.width']:this.radius/2),angles[i][1],angles[i][0],true);}else{co.lineTo(angles[i][2],angles[i][3]);}\nco.closePath();if(!co.isPointInPath(mouseX,mouseY)){continue;}\nret[0]=angles[i][2];ret[1]=angles[i][3];ret[2]=this.radius;ret[3]=angles[i][0]-RG.TWOPI;ret[4]=angles[i][1];ret[5]=i;if(ret[3]<0)ret[3]+=RG.TWOPI;if(ret[4]>RG.TWOPI)ret[4]-=RG.TWOPI;var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],ret[5]):null;ret['object']=this;ret['x']=ret[0];ret['y']=ret[1];ret['radius']=ret[2];ret['angle.start']=ret[3];ret['angle.end']=ret[4];ret['index']=ret[5];ret['tooltip']=tooltip;return ret;}\nreturn null;};this.drawBorders=this.DrawBorders=function()\n{if(prop['chart.linewidth']>0){co.lineWidth=prop['chart.linewidth'];co.strokeStyle=prop['chart.strokestyle'];var r=this.radius;for(var i=0,len=this.angles.length;i<len;++i){var segment=this.angles[i];co.beginPath();co.arc(segment[2],segment[3],r,(segment[0]),(segment[0]+0.001),0);co.arc(segment[2],segment[3],prop['chart.variant']=='donut'?(typeof(prop['chart.variant.donut.width'])=='number'?this.radius-prop['chart.variant.donut.width']:r/2):r,segment[0],segment[0]+0.0001,0);co.closePath();co.stroke();}}};this.getRadius=function()\n{this.graph={width:ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'],height:ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom']}\nif(typeof(prop['chart.radius'])=='number'){this.radius=prop['chart.radius'];}else{this.radius=Math.min(this.graph.width,this.graph.height)/2;}\nreturn this.radius;};this.explodeSegment=this.Explode=function(index,size)\n{if(typeof this.exploding==='number'&&this.exploding===index){return;}\nif(!prop['chart.exploded']){prop['chart.exploded']=[];}\nif(typeof(prop['chart.exploded'])=='number'){var original_explode=prop['chart.exploded'];var exploded=prop['chart.exploded'];prop['chart.exploded']=[];for(var i=0,len=this.data.length;i<len;++i){prop['chart.exploded'][i]=exploded;}}\nprop['chart.exploded'][index]=typeof(original_explode)=='number'?original_explode:0;this.exploding=index;var delay=RG.ISIE&&!RG.ISIE10?25:16.666;for(var o=0;o<size;++o){setTimeout(function()\n{prop['chart.exploded'][index]+=1;RG.Clear(ca);RG.RedrawCanvas(ca);},o*delay);}\nvar obj=this;setTimeout(function()\n{obj.exploding=null;},size*delay);};this.highlight_segment=function(segment)\n{co.beginPath();co.strokeStyle=prop['chart.highlight.style.twod.stroke'];co.fillStyle=prop['chart.highlight.style.twod.fill'];co.moveTo(segment[0],segment[1]);co.arc(segment[0],segment[1],segment[2],this.angles[segment[5]][0],this.angles[segment[5]][1],0);co.lineTo(segment[0],segment[1]);co.closePath();co.stroke();co.fill();};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else if(prop['chart.highlight.style']=='3d'){co.lineWidth=1;var extent=2;co.beginPath();RG.NoShadow(this);co.fillStyle='rgba(0,0,0,0)';co.arc(shape['x'],shape['y'],shape['radius'],shape['angle.start'],shape['angle.end'],false);if(prop['chart.variant']=='donut'){co.arc(shape['x'],shape['y'],shape['radius']/5,shape['angle.end'],shape['angle.start'],true);}else{co.lineTo(shape['x'],shape['y']);}\nco.closePath();co.fill();co.beginPath();co.shadowColor='#666';co.shadowBlur=3;co.shadowOffsetX=3;co.shadowOffsetY=3;co.fillStyle=prop['chart.colors'][shape['index']];co.strokeStyle=prop['chart.strokestyle'];co.arc(shape['x']-extent,shape['y']-extent,shape['radius'],shape['angle.start'],shape['angle.end'],false);if(prop['chart.variant']=='donut'){co.arc(shape['x']-extent,shape['y']-extent,shape['radius']/2,shape['angle.end'],shape['angle.start'],true)}else{co.lineTo(shape['x']-extent,shape['y']-extent);}\nco.closePath();co.stroke();co.fill();RG.NoShadow(this);if(prop['chart.border']){co.beginPath();co.strokeStyle=prop['chart.border.color'];co.lineWidth=5;co.arc(shape['x']-extent,shape['y']-extent,shape['radius']-2,shape['angle.start'],shape['angle.end'],false);co.stroke();}}else if(prop['chart.highlight.style']==='outline'){var tooltip=RG.Registry.get('chart.tooltip'),index=tooltip.__index__,coords=this.angles[index],color=this.get('colors')[index]\nwidth=this.radius/12.5;if(typeof prop['chart.highlight.style.outline.width']==='number'){width=prop['chart.highlight.style.outline.width'];}\nRGraph.path2(co,'ga 0.25 b a % % % % % false a % % % % % true c f % ga 1',coords[2],coords[3],this.radius+2+width,coords[0],coords[1],coords[2],coords[3],this.radius+2,coords[1],coords[0],color);}else{co.beginPath();co.strokeStyle=prop['chart.highlight.style.twod.stroke'];co.fillStyle=prop['chart.highlight.style.twod.fill'];if(prop['chart.variant'].indexOf('donut')>-1){co.arc(shape['x'],shape['y'],shape['radius'],shape['angle.start'],shape['angle.end'],false);co.arc(shape['x'],shape['y'],typeof(prop['chart.variant.donut.width'])=='number'?this.radius-prop['chart.variant.donut.width']:shape['radius']/2,shape['angle.end'],shape['angle.start'],true);}else{co.arc(shape['x'],shape['y'],shape['radius']+1,shape['angle.start'],shape['angle.end'],false);co.lineTo(shape['x'],shape['y']);}\nco.closePath();co.stroke();co.fill();}}};this.getObjectByXY=function(e)\n{if(this.getShape(e)){return this;}};this.drawCenterpin=this.DrawCenterpin=function()\n{if(typeof(prop['chart.centerpin'])=='number'&&prop['chart.centerpin']>0){var cx=this.centerx;var cy=this.centery;co.beginPath();co.strokeStyle=prop['chart.centerpin.stroke']?prop['chart.centerpin.stroke']:prop['chart.strokestyle'];co.fillStyle=prop['chart.centerpin.fill']?prop['chart.centerpin.fill']:prop['chart.strokestyle'];co.moveTo(cx,cy);co.arc(cx,cy,prop['chart.centerpin'],0,RG.TWOPI,false);co.stroke();co.fill();}};this.drawInGraphLabels=this.DrawInGraphLabels=function()\n{var context=co;var cx=this.centerx;var cy=this.centery;var radius=prop['chart.labels.ingraph.radius'];if(radius<=2&&radius>0){radiusFactor=radius;}else{radiusFactor=0.5;}\nif(prop['chart.variant']=='donut'){var r=this.radius*(0.5+(radiusFactor*0.5));if(typeof(prop['chart.variant.donut.width'])=='number'){var r=(this.radius-prop['chart.variant.donut.width'])+(prop['chart.variant.donut.width']/2);}}else{var r=this.radius*radiusFactor;}\nif(radius>2){r=radius;}\nfor(var i=0,len=this.angles.length;i<len;++i){if(typeof(prop['chart.exploded'])=='object'&&typeof(prop['chart.exploded'][i])=='number'){var explosion=prop['chart.exploded'][i];}else if(typeof(prop['chart.exploded'])=='number'){var explosion=parseInt(prop['chart.exploded']);}else{var explosion=0;}\nvar angleStart=this.angles[i][0];var angleEnd=this.angles[i][1];var angleCenter=((angleEnd-angleStart)/2)+angleStart;var coords=RG.getRadiusEndPoint(this.centerx,this.centery,angleCenter,r+(explosion?explosion:0));var x=coords[0];var y=coords[1];var text=prop['chart.labels.ingraph.specific']&&typeof(prop['chart.labels.ingraph.specific'][i])=='string'?prop['chart.labels.ingraph.specific'][i]:RG.number_format(this,this.data[i],prop['chart.labels.ingraph.units.pre'],prop['chart.labels.ingraph.units.post']);if(text){co.beginPath();var font=typeof prop['chart.labels.ingraph.font']==='string'?prop['chart.labels.ingraph.font']:prop['chart.text.font'];var size=typeof prop['chart.labels.ingraph.size']==='number'?prop['chart.labels.ingraph.size']:prop['chart.text.size']+2;co.fillStyle=prop['chart.labels.ingraph.color']?prop['chart.labels.ingraph.color']:'black';RG.Text2(this,{'font':font,'size':size,'x':x,'y':y,'text':text,'valign':'center','halign':'center','bounding':prop['chart.labels.ingraph.bounding'],'bounding.fill':prop['chart.labels.ingraph.bounding.fill'],'tag':'labels.ingraph'});co.stroke();}}};this.drawCenterLabel=function(label)\n{var font=prop['chart.labels.center.font'],size=prop['chart.labels.center.size'],color=prop['chart.labels.center.color'],unitsPre=prop['chart.labels.center.units.pre'],unitsPost=prop['chart.labels.center.units.post'],bold=prop['chart.labels.center.bold'],italic=prop['chart.labels.center.italic'];RG.text2(this,{color:color,bold:bold,italic:italic,font:font,size:size,x:this.centerx,y:this.centery,halign:'center',valign:'center',text:RG.numberFormat(this,label,unitsPre,unitsPost)});}\nthis.getAngle=function(value)\n{if(value>this.total){return null;}\nvar angle=(value/this.total)*RG.TWOPI;angle+=prop['chart.origin'];return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);this.original_colors['chart.key.colors']=RG.arrayClone(prop['chart.key.colors']);this.original_colors['chart.strokestyle']=RG.arrayClone(prop['chart.strokestyle']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.style.twod.fill']=RG.arrayClone(prop['chart.highlight.style.twod.fill']);this.original_colors['chart.highlight.style.twod.stroke']=RG.arrayClone(prop['chart.highlight.style.twod.stroke']);this.original_colors['chart.ingraph.bounding.fill']=RG.arrayClone(prop['chart.ingraph.bounding.fill']);this.original_colors['chart.ingraph.color']=RG.arrayClone(prop['chart.ingraph.color']);}\nfor(var i=0;i<prop['chart.colors'].length;++i){prop['chart.colors'][i]=this.parseSingleColorForGradient(prop['chart.colors'][i]);}\nvar keyColors=prop['chart.key.colors'];if(keyColors){for(var i=0;i<keyColors.length;++i){keyColors[i]=this.parseSingleColorForGradient(keyColors[i]);}}\nprop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.style.twod.fill']=this.parseSingleColorForGradient(prop['chart.highlight.style.twod.fill']);prop['chart.highlight.style.twod.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.style.twod.stroke']);prop['chart.labels.ingraph.bounding.fill']=this.parseSingleColorForGradient(prop['chart.labels.ingraph.bounding.fill']);prop['chart.labels.ingraph.color']=this.parseSingleColorForGradient(prop['chart.labels.ingraph.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');if(prop['chart.variant']=='donut'){var radius_start=typeof(prop['chart.variant.donut.width'])=='number'?this.radius-prop['chart.variant.donut.width']:this.radius/2;}else{var radius_start=0;}\nvar grad=co.createRadialGradient(this.centerx,this.centery,radius_start,this.centerx,this.centery,Math.min(ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'],ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'])/2);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{if(this.angles&&this.angles[index]){var segment=this.angles[index];var x=segment[2];var y=segment[3];var start=segment[0];var end=segment[1];co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.lineWidth=2;co.lineJoin='bevel';co.beginPath();co.moveTo(x,y);co.arc(x,y,this.radius,start,end,false);co.closePath();co.fill();co.stroke();}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.draw3d=function()\n{var scaleX=1.5,depth=prop['chart.variant.threed.depth'],prop_shadow=prop['chart.shadow'],prop_labels=prop['chart.labels'],prop_labelsSticks=prop['chart.labels.sticks']\nthis.set({labels:[],labelsSticks:false,strokestyle:'rgba(0,0,0,0)'});this.set({variant:this.get('variant').replace(/3d/,'')});this.context.setTransform(scaleX,0,0,1,(ca.width*(scaleX)-ca.width)* -0.5,0);for(var i=depth;i>0;i-=1){this.set({centeryAdjust:i});if(i===parseInt(depth/2)){this.set({labels:prop_labels,labelsSticks:prop_labelsSticks});}\nif(i===0){this.set({shadow:prop_shadow});}\nthis.draw();this.set('shadow',false);if(i<=parseInt(depth/2)){this.set({labels:[],labelsSticks:false});}\nif(i>1){if(prop['chart.variant'].indexOf('donut')!==-1){for(var j=0;j<this.angles.length;++j){pa2(co,['b','a',this.angles[j][2],this.angles[j][3],this.radius+1,this.angles[j][0],this.angles[j][1]*prop['chart.effect.roundrobin.multiplier'],false,'a',this.angles[j][2],this.angles[j][3],this.radius/2,this.angles[j][1]*prop['chart.effect.roundrobin.multiplier'],this.angles[j][0],true,'f','rgba(0,0,0,0.15)']);}}else{for(var j=0;j<this.angles.length;++j){pa2(co,['b','m',this.angles[j][2],this.angles[j][3],'a',this.angles[j][2],this.angles[j][3],this.radius+1,this.angles[j][0],this.angles[j][1]*prop['chart.effect.roundrobin.multiplier'],false,'c','f','rgba(0,0,0,0.15)']);}}}}\nthis.set({variant:this.get('variant')+'3d',shadow:prop_shadow,labels:prop_labels,labelsSticks:prop_labelsSticks});return this;};this.explode=function()\n{var obj=this;var opt=arguments[0]?arguments[0]:{};var callback=arguments[1]?arguments[1]:function(){};var frames=opt.frames?opt.frames:30;var frame=0;var maxExplode=Number(typeof opt.radius==='number'?opt.radius:ma.max(ca.width,ca.height));var currentExplode=Number(obj.get('exploded'))||0;var step=(maxExplode-currentExplode)/frames;var iterator=function()\n{obj.set('exploded',currentExplode+(step*frame));RGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);if(frame++<frames){RGraph.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.grow=function()\n{var obj=this;var canvas=obj.canvas;var opt=arguments[0]?arguments[0]:{};var frames=opt.frames||30;var frame=0;var callback=arguments[1]?arguments[1]:function(){};var radius=obj.getRadius();prop['chart.radius']=0;var iterator=function()\n{obj.set('chart.radius',(frame/frames)*radius);RG.redrawCanvas(ca);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{RG.redrawCanvas(obj.canvas);callback(obj);}};iterator();return this;};this.roundrobin=this.roundRobin=function()\n{var obj=this,opt=arguments[0]||{},callback=arguments[1]||function(){},frame=0,frames=opt.frames||30,radius=obj.getRadius(),labels=obj.get('labels')\nobj.Set('chart.events',false);obj.Set('chart.labels',[]);var iterator=function()\n{obj.set('effect.roundrobin.multiplier',RG.Effects.getEasingMultiplier(frames,frame));RGraph.redrawCanvas(ca);if(frame++<frames){RGraph.Effects.updateCanvas(iterator);}else{obj.set({events:true,labels:labels});RG.redrawCanvas(obj.canvas);callback(obj);}};iterator();return this;};RG.att(ca);this.implode=function()\n{var obj=this,opt=arguments[0]||{},callback=arguments[1]||function(){},frames=opt.frames||30,frame=0,explodedMax=ma.max(ca.width,ca.height),exploded=explodedMax;function iterator()\n{exploded=explodedMax-((frame/frames)*explodedMax);obj.Set('exploded',exploded);RG.clear(ca);RG.redrawCanvas(ca);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);callback(obj);}}\niterator();return this;};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.radar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Radar=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;if(typeof conf.data[0]==='number'||typeof conf.data[0]==='string'){conf.data=[conf.data];}}else{var conf={id:conf,data:[]};if(typeof arguments[1]==='object'&&typeof arguments[1][0]==='number'){for(var i=1;i<arguments.length;++i){conf.data.push(RGraph.arrayClone(arguments[i]));}}else if(typeof arguments[1]==='object'&&typeof arguments[1][0]==='object'&&typeof arguments[1][0][0]==='number'){conf.data=RGraph.arrayClone(arguments[1]);}}\nthis.id=conf.id;this.canvas=document.getElementById(conf.id);this.context=this.canvas.getContext?this.canvas.getContext(\"2d\"):null;this.canvas.__object__=this;this.type='radar';this.isRGraph=true;this.data=[];this.max=0;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coords=[];this.coordsText=[];this.original_data=[];this.original_colors=[];this.firstDraw=true;for(var i=0,len=conf.data.length;i<len;++i){for(var j=0;j<conf.data[i].length;++j){if(typeof conf.data[i][j]==='string'){conf.data[i][j]=parseFloat(conf.data[i][j]);}}\nthis.original_data.push(RGraph.arrayClone(conf.data[i]));this.data.push(RGraph.arrayClone(conf.data[i]));this.max=Math.max(this.max,RGraph.arrayMax(conf.data[i]));}\nthis.properties={'chart.strokestyle':'#aaa','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.linewidth':1,'chart.colors':['rgba(255,255,0,0.25)','rgba(0,255,255,0.25)','rgba(255,0,0,0.5)','red','green','blue','pink','aqua','brown','orange','grey'],'chart.colors.alpha':null,'chart.circle':0,'chart.circle.fill':'red','chart.circle.stroke':'black','chart.labels':[],'chart.labels.color':null,'chart.labels.offset':10,'chart.labels.axes':'','chart.labels.background.fill':'white','chart.labels.boxed':false,'chart.labels.axes.bold':[],'chart.labels.axes.boxed':null,'chart.labels.axes.boxed.zero':true,'chart.labels.axes.boxed.background':'rgba(255,255,255,0.9)','chart.labels.specific':[],'chart.labels.count':5,'chart.background.circles':true,'chart.background.circles.count':null,'chart.background.circles.color':'#ddd','chart.background.circles.poly':true,'chart.background.circles.spokes':24,'chart.text.size':12,'chart.text.size.scale':null,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.color':'black','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.color':'black','chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.linewidth':1,'chart.key':null,'chart.key.background':'white','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position':'graph','chart.key.halign':'right','chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'rgba(255,0,0,0.3)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.contextmenu':null,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.tooltips.effect':'fade','chart.tooltips.event':'onmousemove','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.highlight.stroke':'gray','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.highlight.point.radius':2,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.ymax':null,'chart.accumulative':false,'chart.radius':null,'chart.events.click':null,'chart.events.mousemove':null,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.event':'onmousemove','chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.numxticks':5,'chart.numyticks':5,'chart.axes.color':'rgba(0,0,0,0)','chart.highlights':false,'chart.highlights.stroke':'#ddd','chart.highlights.fill':null,'chart.highlights.radius':3,'chart.fill.click':null,'chart.fill.mousemove':null,'chart.fill.tooltips':null,'chart.fill.highlight.fill':'rgba(255,255,255,0.7)','chart.fill.highlight.stroke':'rgba(0,0,0,0)','chart.fill.mousemove.redraw':false,'chart.animation.trace.clip':1,'chart.clearto':'rgba(0,0,0,0)'}\nfor(var dataset=0;dataset<this.data.length;++dataset){if(this.data[dataset].length<3){alert('[RADAR] You must specify at least 3 data points');return;}}\nvar idx=0;for(var dataset=0;dataset<this.data.length;++dataset){for(var i=0,len=this.data[dataset].length;i<len;++i){this['$'+(idx++)]={};}}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name,value)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.text.diameter'){name='chart.text.size';}\nif(name=='chart.color'){this.properties['chart.colors']=[value];}\nprop[name]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.text.diameter'){name='chart.text.size';}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.coords=[];this.coords2=[];this.coordsText=[];this.data=RG.arrayClone(this.original_data);if(prop['chart.accumulative']){for(var i=0;i<this.data.length;++i){if(this.data[i].length!=this.data[0].length){alert('[RADAR] Error! When the radar has chart.accumulative set to true all the datasets must have the same number of elements');}}}\nif(RG.isNull(prop['chart.labels.axes.boxed'])){prop['chart.labels.axes.boxed']=[];for(var i=0;i<(prop['chart.labels.specific'].length||prop['chart.labels.count']||5);++i){prop['chart.labels.axes.boxed'][i]=false;}}\nthis.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.radius=Math.min(ca.width-this.gutterLeft-this.gutterRight,ca.height-this.gutterTop-this.gutterBottom)/2;if(typeof prop['chart.centerx']=='number')this.centerx=2*prop['chart.centerx'];if(typeof prop['chart.centery']=='number')this.centery=2*prop['chart.centery'];if(typeof prop['chart.radius']=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nif(!prop['chart.ymax']){if(prop['chart.accumulative']){var accumulation=[];var len=this.original_data[0].length\nfor(var i=1;i<this.original_data.length;++i){if(this.original_data[i].length!=len){alert('[RADAR] Error! Stacked Radar chart datasets must all be the same size!');}\nfor(var j=0;j<this.original_data[i].length;++j){this.data[i][j]+=this.data[i-1][j];this.max=Math.max(this.max,this.data[i][j]);}}}\nthis.scale2=RG.getScale2(this,{'max':typeof(prop['chart.ymax'])=='number'?prop['chart.ymax']:this.max,'min':0,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});this.max=this.scale2.max;}else{var ymax=prop['chart.ymax'];this.scale2=RG.getScale2(this,{'max':ymax,'min':0,'strict':true,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});this.max=this.scale2.max;}\nthis.drawBackground();this.drawAxes();this.drawCircle();this.drawLabels();co.save();co.beginPath();co.arc(this.centerx,this.centery,this.radius*2,-RG.HALFPI,(RG.TWOPI*prop['chart.animation.trace.clip'])-RG.HALFPI,false);co.lineTo(this.centerx,this.centery);co.closePath();co.clip();this.DrawChart();this.DrawHighlights();co.restore();this.drawAxisLabels();if(prop['chart.title']){RG.DrawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.diameter']?prop['chart.title.diameter']:null)}\nif(prop['chart.key']){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if((prop['chart.fill.click']||prop['chart.fill.mousemove']||!RG.is_null(prop['chart.fill.tooltips']))&&!this.__fill_click_listeners_installed__){this.AddFillListeners();this.__fill_click_listeners_installed__=true;}\nif(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRGraph.FireCustomEvent(this,'ondraw');return this;};this.exec=function(func)\n{func(this);return this;};this.drawBackground=this.DrawBackground=function()\n{var color=prop['chart.background.circles.color'];var poly=prop['chart.background.circles.poly'];var spacing=prop['chart.background.circles.spacing'];var spokes=prop['chart.background.circles.spokes'];co.lineWidth=1;if(prop['chart.background.circles']&&poly==false){co.strokeStyle=color;co.beginPath();var numrings=typeof(prop['chart.background.circles.count'])=='number'?prop['chart.background.circles.count']:prop['chart.labels.count'];for(var r=0;r<=this.radius;r+=(this.radius/numrings)){co.moveTo(this.centerx,this.centery);co.arc(this.centerx,this.centery,r,0,RG.TWOPI,false);}\nco.stroke();co.strokeStyle=color;for(var i=0;i<360;i+=(360/spokes)){co.beginPath();co.arc(this.centerx,this.centery,this.radius,(i/360)*RG.TWOPI,((i+0.001)/360)*RG.TWOPI,false);co.lineTo(this.centerx,this.centery);co.stroke();}}else if(prop['chart.background.circles']&&poly==true){co.strokeStyle=color;var increment=360/this.data[0].length\nfor(var i=0;i<360;i+=increment){co.beginPath();co.arc(this.centerx,this.centery,this.radius,((i/360)*RG.TWOPI)-RG.HALFPI,(((i+0.001)/360)*RG.TWOPI)-RG.HALFPI,false);co.lineTo(this.centerx,this.centery);co.stroke();}\nco.strokeStyle=color;var numrings=typeof(prop['chart.background.circles.count'])=='number'?prop['chart.background.circles.count']:prop['chart.labels.count'];for(var r=0;r<=this.radius;r+=(this.radius/numrings)){co.beginPath();for(var a=0;a<=360;a+=(360/this.data[0].length)){co.arc(this.centerx,this.centery,r,RG.degrees2Radians(a)-RG.HALFPI,RG.degrees2Radians(a)+0.001-RG.HALFPI,false);}\nco.closePath();co.stroke();}}};this.drawAxes=this.DrawAxes=function()\n{co.strokeStyle=prop['chart.axes.color'];var halfsize=this.radius;co.beginPath();co.moveTo(Math.round(this.centerx),this.centery+this.radius);co.lineTo(Math.round(this.centerx),this.centery-this.radius);co.moveTo(this.centerx-5,Math.round(this.centery+this.radius));co.lineTo(this.centerx+5,Math.round(this.centery+this.radius));co.moveTo(this.centerx-5,Math.round(this.centery-this.radius));co.lineTo(this.centerx+5,Math.round(this.centery-this.radius));for(var y=(this.centery-this.radius);y<(this.centery+this.radius);y+=(this.radius/prop['chart.numyticks'])){co.moveTo(this.centerx-3,Math.round(y));co.lineTo(this.centerx+3,Math.round(y));}\nco.moveTo(this.centerx-this.radius,Math.round(this.centery));co.lineTo(this.centerx+this.radius,Math.round(this.centery));co.moveTo(Math.round(this.centerx-this.radius),this.centery-5);co.lineTo(Math.round(this.centerx-this.radius),this.centery+5);co.moveTo(Math.round(this.centerx+this.radius),this.centery-5);co.lineTo(Math.round(this.centerx+this.radius),this.centery+5);for(var x=(this.centerx-this.radius);x<(this.centerx+this.radius);x+=(this.radius/prop['chart.numxticks'])){co.moveTo(Math.round(x),this.centery-3);co.lineTo(Math.round(x),this.centery+3);}\nco.stroke();};this.drawChart=this.DrawChart=function()\n{var alpha=prop['chart.colors.alpha'];if(typeof(alpha)=='number'){var oldAlpha=co.globalAlpha;co.globalAlpha=alpha;}\nvar numDatasets=this.data.length;for(var dataset=0;dataset<this.data.length;++dataset){co.beginPath();var coords_dataset=[];for(var i=0;i<this.data[dataset].length;++i){var coords=this.GetCoordinates(dataset,i);if(coords_dataset==null){coords_dataset=[];}\ncoords_dataset.push(coords);this.coords.push(coords);}\nthis.coords2[dataset]=coords_dataset;co.strokeStyle=(typeof(prop['chart.strokestyle'])=='object'&&prop['chart.strokestyle'][dataset])?prop['chart.strokestyle'][dataset]:prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][dataset]?prop['chart.colors'][dataset]:'rgba(0,0,0,0)';if(co.fillStyle==='transparent'){co.fillStyle='rgba(0,0,0,0)';}\nco.lineWidth=prop['chart.linewidth'];for(i=0;i<coords_dataset.length;++i){if(i==0){co.moveTo(coords_dataset[i][0],coords_dataset[i][1]);}else{co.lineTo(coords_dataset[i][0],coords_dataset[i][1]);}}\nif(prop['chart.accumulative']&&dataset>0){co.lineTo(coords_dataset[0][0],coords_dataset[0][1]);co.moveTo(last_coords[0][0],last_coords[0][1]);for(var i=coords_dataset.length-1;i>=0;--i){co.lineTo(last_coords[i][0],last_coords[i][1]);}}\nvar last_coords=coords_dataset;co.closePath();co.stroke();co.fill();}\nif(typeof(alpha)=='number'){co.globalAlpha=oldAlpha;}};this.getCoordinates=this.GetCoordinates=function(dataset,index)\n{var len=this.data[dataset].length;var mag=(this.data[dataset][index]/this.max)*this.radius;var angle=(RG.TWOPI/len)*index;angle-=RG.HALFPI;var x=Math.cos(angle)*mag;var y=Math.sin(angle)*mag;x=this.centerx+x;y=this.centery+y;return[x,y];};this.drawLabels=this.DrawLabels=function()\n{var labels=prop['chart.labels'];if(labels&&labels.length>0){co.lineWidth=1;co.strokeStyle='gray';co.fillStyle=prop['chart.labels.color']||prop['chart.text.color'];var bgFill=prop['chart.labels.background.fill'],bold=prop['chart.labels.bold'],bgBoxed=prop['chart.labels.boxed'],offset=prop['chart.labels.offset'],font=prop['chart.text.font'],size=prop['chart.text.size'],radius=this.radius,color=prop['chart.labels.color']||prop['chart.text.color']\nfor(var i=0;i<labels.length;++i){var angle=(RG.TWOPI/prop['chart.labels'].length)*i;angle-=RG.HALFPI;var x=this.centerx+(ma.cos(angle)*(radius+offset));var y=this.centery+(ma.sin(angle)*(radius+offset));var halign=x<this.centerx?'right':'left';if(i==0||(i/labels.length)==0.5)halign='center';if(labels[i]&&labels[i].length){RG.text2(this,{'color':color,'font':font,'size':size,'x':x,'y':y,'text':labels[i],'valign':'center','halign':halign,'bounding':bgBoxed,'boundingFill':bgFill,'bold':bold,'tag':'labels'});}}}};this.drawCircle=this.DrawCircle=function()\n{var circle={};circle.limit=prop['chart.circle'];circle.fill=prop['chart.circle.fill'];circle.stroke=prop['chart.circle.stroke'];if(circle.limit){var r=(circle.limit/this.max)*this.radius;co.fillStyle=circle.fill;co.strokeStyle=circle.stroke;co.beginPath();co.arc(this.centerx,this.centery,r,0,RG.TWOPI,0);co.fill();co.stroke();}};this.drawAxisLabels=this.DrawAxisLabels=function()\n{if(RG.isArray(prop['chart.labels.specific'])&&prop['chart.labels.specific'].length){this.drawSpecificAxisLabels();return;}\nco.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';var r=this.radius,font=prop['chart.text.font'],size=typeof(prop['chart.text.size.scale'])=='number'?prop['chart.text.size.scale']:prop['chart.text.size'],axes=prop['chart.labels.axes'].toLowerCase(),color=prop['chart.labels.axes.boxed.background'],drawzero=false,units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],decimals=prop['chart.scale.decimals'],bold=prop['chart.labels.axes.bold'],boxed=prop['chart.labels.axes.boxed'],centerx=this.centerx,centery=this.centery,scale=this.scale;co.fillStyle=prop['chart.text.color'];if(axes.indexOf('n')>-1){for(var i=0;i<this.scale2.labels.length;++i){RG.Text2(this,{'bold':bold[i],'font':font,'size':size,'x':centerx,'y':centery-(r*((i+1)/this.scale2.labels.length)),'text':this.scale2.labels[i],'valign':'center','halign':'center','bounding':boxed[i]||color,'boundingFill':color,'boundingStroke':'rgba(0,0,0,0)','tag':'scale'});}\ndrawzero=true;}\nif(axes.indexOf('s')>-1){for(var i=0;i<this.scale2.labels.length;++i){RG.Text2(this,{'bold':bold[i],'font':font,'size':size,'x':centerx,'y':centery+(r*((i+1)/this.scale2.labels.length)),'text':this.scale2.labels[i],'valign':'center','halign':'center','bounding':boxed[i]||color,'boundingFill':color,'boundingStroke':'rgba(0,0,0,0)','tag':'scale'});}\ndrawzero=true;}\nif(axes.indexOf('e')>-1){for(var i=0;i<this.scale2.labels.length;++i){RG.Text2(this,{'bold':bold[i],'font':font,'size':size,'x':centerx+(r*((i+1)/this.scale2.labels.length)),'y':centery,'text':this.scale2.labels[i],'valign':'center','halign':'center','bounding':boxed[i]||color,'boundingFill':color,'boundingStroke':'rgba(0,0,0,0)','tag':'scale'});}\ndrawzero=true;}\nif(axes.indexOf('w')>-1){for(var i=0;i<this.scale2.labels.length;++i){RG.Text2(this,{'bold':bold[i],'font':font,'size':size,'x':centerx-(r*((i+1)/this.scale2.labels.length)),'y':centery,'text':this.scale2.labels[i],'valign':'center','halign':'center','bounding':boxed[i]||color,'boundingFill':color,'boundingStroke':'rgba(0,0,0,0)','tag':'scale'});}\ndrawzero=true;}\nif(drawzero){RG.Text2(this,{font:font,size:size,x:centerx,y:centery,text:RG.numberFormat(this,Number(0).toFixed(),units_pre,units_post),valign:'center',halign:'center',bounding:prop['chart.labels.axes.boxed.zero'],boundingFill:color,boundingStroke:'rgba(0,0,0,0)',bold:prop['chart.labels.axes.bold.zero'],tag:'scale'});}};this.drawSpecificAxisLabels=this.DrawSpecificAxisLabels=function()\n{var labels=prop['chart.labels.specific'];var bold=RG.array_pad(prop['chart.labels.axes.bold'],labels.length);var boxed=RG.array_pad(prop['chart.labels.axes.boxed'],labels.length);var reversed_labels=RG.array_reverse(labels);var reversed_bold=RG.array_reverse(bold);var reversed_boxed=RG.array_reverse(boxed);var font=prop['chart.text.font'];var size=typeof(prop['chart.text.size.scale'])=='number'?prop['chart.text.size.scale']:prop['chart.text.size'];var axes=prop['chart.labels.axes'].toLowerCase();co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;++i){if(axes.indexOf('n')>-1)RG.Text2(this,{'tag':'labels.specific','bold':reversed_bold[i],'font':font,'size':size,'x':this.centerx,'y':this.centery-this.radius+((this.radius/labels.length)*i),'text':reversed_labels[i],'valign':'center','halign':'center','bounding':reversed_boxed[i],'boundingFill':'white'});if(axes.indexOf('s')>-1)RG.Text2(this,{'tag':'labels.specific','bold':bold[i],'font':font,'size':size,'x':this.centerx,'y':this.centery+((this.radius/labels.length)*(i+1)),'text':labels[i],'valign':'center','halign':'center','bounding':boxed[i],'boundingFill':'white'});if(axes.indexOf('w')>-1)RG.Text2(this,{'tag':'labels.specific','bold':reversed_bold[i],'font':font,'size':size,'x':this.centerx-this.radius+((this.radius/labels.length)*i),'y':this.centery,'text':reversed_labels[i],'valign':'center','halign':'center','bounding':reversed_boxed[i],'boundingFill':'white'});if(axes.indexOf('e')>-1)RG.Text2(this,{'tag':'labels.specific','bold':bold[i],'font':font,'size':size,'x':this.centerx+((this.radius/labels.length)*(i+1)),'y':this.centery,'text':labels[i],'valign':'center','halign':'center','bounding':boxed[i],'boundingFill':'white'});}};this.getShape=this.getPoint=function(e)\n{for(var i=0;i<this.coords.length;++i){var x=this.coords[i][0];var y=this.coords[i][1];var tooltips=prop['chart.tooltips'];var index=Number(i);var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX<(x+5)&&mouseX>(x-5)&&mouseY>(y-5)&&mouseY<(y+5)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],index);return{0:this,'object':this,1:x,'x':x,2:y,'y':y,3:null,'dataset':null,4:index,'index':i,'tooltip':tooltip}}}};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Point(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>(this.centerx-this.radius)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+this.radius)){return this;}};this.drawHighlights=this.DrawHighlights=function()\n{if(prop['chart.highlights']){var sequentialIdx=0;var dataset=0;var index=0;var radius=prop['chart.highlights.radius'];for(var dataset=0;dataset<this.data.length;++dataset){for(var index=0;index<this.data[dataset].length;++index){co.beginPath();co.strokeStyle=prop['chart.highlights.stroke'];co.fillStyle=prop['chart.highlights.fill']?prop['chart.highlights.fill']:((typeof(prop['chart.strokestyle'])=='object'&&prop['chart.strokestyle'][dataset])?prop['chart.strokestyle'][dataset]:prop['chart.strokestyle']);co.arc(this.coords[sequentialIdx][0],this.coords[sequentialIdx][1],radius,0,RG.TWOPI,false);co.stroke();co.fill();++sequentialIdx;}}}};this.getRadius=function(value)\n{if(value<0||value>this.max){return null;}\nvar radius=(value/this.max)*this.radius;return radius;};this.getAngle=function(numitems,index)\n{var angle=(RG.TWOPI/numitems)*index;angle-=RG.HALFPI;return angle;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);this.original_colors['chart.key.colors']=RG.arrayClone(prop['chart.key.colors']);this.original_colors['chart.title.color']=RG.arrayClone(prop['chart.title.color']);this.original_colors['chart.text.color']=RG.arrayClone(prop['chart.text.color']);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.circle.fill']=RG.arrayClone(prop['chart.circle.fill']);this.original_colors['chart.circle.stroke']=RG.arrayClone(prop['chart.circle.stroke']);this.original_colors['chart.strokestyle']=RG.arrayClone(prop['chart.strokestyle']);}\nfor(var i=0;i<prop['chart.colors'].length;++i){prop['chart.colors'][i]=this.parseSingleColorForGradient(prop['chart.colors'][i]);}\nvar keyColors=prop['chart.key.colors'];if(typeof(keyColors)!='null'&&keyColors&&keyColors.length){for(var i=0;i<prop['chart.key.colors'].length;++i){prop['chart.key.colors'][i]=this.parseSingleColorForGradient(prop['chart.key.colors'][i]);}}\nprop['chart.title.color']=this.parseSingleColorForGradient(prop['chart.title.color']);prop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.circle.fill']=this.parseSingleColorForGradient(prop['chart.circle.fill']);prop['chart.circle.stroke']=this.parseSingleColorForGradient(prop['chart.circle.stroke']);if(typeof prop['chart.strokestyle']==='object'){for(var i=0;i<prop['chart.strokestyle'].length;++i){prop['chart.strokestyle'][i]=this.parseSingleColorForGradient(prop['chart.strokestyle'][i]);}}else{prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.addFillListeners=this.AddFillListeners=function(e)\n{var obj=this;var func=function(e)\n{var coords=this.coords;var coords2=this.coords2;var mouseXY=RG.getMouseXY(e);var dataset=0;if(e.type=='mousemove'&&prop['chart.fill.mousemove.redraw']){RG.RedrawCanvas(ca);}\nfor(var dataset=(obj.coords2.length-1);dataset>=0;--dataset){co.beginPath();co.moveTo(obj.coords2[dataset][0][0],obj.coords2[dataset][0][1]);for(var j=0;j<obj.coords2[dataset].length;++j){co.lineTo(obj.coords2[dataset][j][0],obj.coords2[dataset][j][1]);}\nco.lineTo(obj.coords2[dataset][0][0],obj.coords2[dataset][0][1]);if(prop['chart.accumulative']&&dataset>0){co.lineTo(obj.coords2[dataset-1][0][0],obj.coords2[dataset-1][0][1]);for(var j=(obj.coords2[dataset-1].length-1);j>=0;--j){co.lineTo(obj.coords2[dataset-1][j][0],obj.coords2[dataset-1][j][1]);}}\nco.closePath();if(co.isPointInPath(mouseXY[0],mouseXY[1])){var inPath=true;break;}}\nif(inPath){var fillTooltips=prop['chart.fill.tooltips'];if(e.type=='click'){if(prop['chart.fill.click']){prop['chart.fill.click'](e,dataset);}\nif(prop['chart.fill.tooltips']&&prop['chart.fill.tooltips'][dataset]){obj.DatasetTooltip(e,dataset);}}\nif(e.type=='mousemove'){if(prop['chart.fill.mousemove']){prop['chart.fill.mousemove'](e,dataset);}\nif(!RG.is_null(fillTooltips)){e.target.style.cursor='pointer';}\nif(prop['chart.fill.tooltips']&&prop['chart.fill.tooltips'][dataset]){e.target.style.cursor='pointer';}}\ne.stopPropagation();}else if(e.type=='mousemove'){ca.style.cursor='default';}};if(prop['chart.fill.click']||!RG.is_null(prop['chart.fill.tooltips'])){ca.addEventListener('click',func,false);}\nif(prop['chart.fill.mousemove']||!RG.is_null(prop['chart.fill.tooltips'])){ca.addEventListener('mousemove',func,false);}};this.highlightDataset=this.HighlightDataset=function(dataset)\n{co.beginPath();for(var j=0;j<this.coords2[dataset].length;++j){if(j==0){co.moveTo(this.coords2[dataset][0][0],this.coords2[dataset][0][1]);}else{co.lineTo(this.coords2[dataset][j][0],this.coords2[dataset][j][1]);}}\nco.lineTo(this.coords2[dataset][0][0],this.coords2[dataset][0][1]);if(prop['chart.accumulative']&&dataset>0){co.lineTo(this.coords2[dataset-1][0][0],this.coords2[dataset-1][0][1]);for(var j=(this.coords2[dataset-1].length-1);j>=0;--j){co.lineTo(this.coords2[dataset-1][j][0],this.coords2[dataset-1][j][1]);}}\nco.strokeStyle=prop['chart.fill.highlight.stroke'];co.fillStyle=prop['chart.fill.highlight.fill'];co.stroke();co.fill();};this.datasetTooltip=this.DatasetTooltip=function(e,dataset)\n{this.HighlightDataset(dataset);var text=prop['chart.fill.tooltips'][dataset];var x=0;var y=this.coords2[dataset][0][1]+RG.getCanvasXY(ca)[1];RG.Tooltip(this,text,x,y,0,e);};this.interactiveKeyHighlight=function(index)\n{var coords=this.coords2[index];if(coords){var pre_linewidth=co.lineWidth;var pre_linecap=co.lineCap;co.lineWidth=prop['chart.linewidth']+10;co.lineCap='round';co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.beginPath();for(var i=0,len=coords.length;i<len;i+=1){if(i==0){co.moveTo(coords[i][0],coords[i][1]);}else{co.lineTo(coords[i][0],coords[i][1]);}}\nco.closePath();co.stroke();co.lineWidth=pre_linewidth;co.lineCap=pre_linecap;}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this;var callback=arguments[1]?arguments[1]:function(){};var opt=arguments[0]?arguments[0]:{};var frames=opt.frames?opt.frames:30;var frame=0;var data=RG.array_clone(obj.data);function iterator()\n{for(var i=0,len=data.length;i<len;++i){for(var j=0,len2=data[i].length;j<len2;++j){obj.original_data[i][j]=(frame/frames)*data[i][j];}}\nRGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);if(frame<frames){frame++;RGraph.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.trace=function()\n{var obj=this;var opt=arguments[0]||{};var frames=opt.frames||60;var frame=0;var callback=arguments[1]||function(){};obj.Set('animation.trace.clip',0);var iterator=function()\n{if(frame<frames){obj.Set('animation.trace.clip',frame/frames);frame++;RG.redrawCanvas(obj.canvas);RG.Effects.updateCanvas(iterator);}else{obj.Set('animation.trace.clip',1);RG.redrawCanvas(obj.canvas);callback(obj);}};iterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.rose.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Effects=RGraph.Effects||{};RGraph.Effects.Rose=RGraph.Effects.Rose||{};RGraph.Rose=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:conf};conf.data=arguments[1];}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext?this.canvas.getContext(\"2d\"):null;this.data=conf.data;this.canvas.__object__=this;this.type='rose';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.centerx=0;this.centery=0;this.radius=0;this.max=0;this.angles=[];this.angles2=[];this.properties={'chart.background.axes':false,'chart.background.axes.color':'black','chart.background.grid':true,'chart.background.grid.color':'#ccc','chart.background.grid.size':null,'chart.background.grid.radials':null,'chart.background.grid.count':5,'chart.centerx':null,'chart.centery':null,'chart.radius':null,'chart.angles.start':0,'chart.colors':['rgba(255,0,0,0.5)','rgba(255,255,0,0.5)','rgba(0,255,255,0.5)','rgb(0,255,0)','gray','blue','rgb(255,128,255)','green','pink','gray','aqua'],'chart.linewidth':1,'chart.colors.sequential':false,'chart.colors.alpha':null,'chart.margin':5,'chart.strokestyle':'rgba(0,0,0,0)','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.shadow':false,'chart.shadow.color':'#aaa','chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels':null,'chart.labels.color':null,'chart.labels.position':'center','chart.labels.axes':'n','chart.labels.boxed':false,'chart.labels.offset':0,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'black','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.event':'onclick','chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.adjustable':false,'chart.ymax':null,'chart.ymin':0,'chart.scale.decimals':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.variant':'stacked','chart.variant.threed.depth':10,'chart.exploded':0,'chart.events.mousemove':null,'chart.events.click':null,'chart.animation.roundrobin.factor':1,'chart.animation.roundrobin.radius':true,'chart.animation.grow.multiplier':1,'chart.labels.count':5,'chart.segment.highlight':false,'chart.segment.highlight.count':null,'chart.segment.highlight.fill':'rgba(0,255,0,0.5)','chart.segment.highlight.stroke':'rgba(0,0,0,0)','chart.clearto':'rgba(0,0,0,0)'}\nfor(var i=0;i<this.data.length;++i){if(typeof this.data[i]==='string'){this.data[i]=parseFloat(this.data[i]);}else if(typeof this.data[i]==='object'){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j]==='string'){this.data[i][j]=parseFloat(this.data[i][j]);}}}}\nvar linear_data=RGraph.arrayLinearize(this.data);for(var i=0;i<linear_data.length;++i){this[\"$\"+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name==='chart.background.grid.spokes')name='chart.background.grid.radials';if(name==='chart.segments.highlight')name='chart.segment.highlight';if(name==='chart.segments.highlight.fill')name='chart.segment.highlight.fill';if(name==='chart.segments.highlight.stroke')name='chart.segment.highlight.stroke';prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=(ma.min(ca.width-this.gutterLeft-this.gutterRight,ca.height-this.gutterTop-this.gutterBottom)/2);this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.angles=[];this.angles2=[];this.total=0;this.startRadians=prop['chart.angles.start'];this.coordsText=[];if(prop['chart.key']&&prop['chart.key'].length>0&&prop['chart.key'].length>=3){this.centerx=this.centerx-this.gutterRight+5;}\nif(typeof prop['chart.centerx']=='number')this.centerx=prop['chart.centerx'];if(typeof prop['chart.centery']=='number')this.centery=prop['chart.centery'];if(typeof prop['chart.radius']=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nif(prop['chart.variant'].indexOf('3d')!==-1){var scaleX=1.5;this.context.setTransform(scaleX,0,0,1,(ca.width*scaleX-ca.width)* -0.5,0);}\nthis.drawBackground();if(prop['chart.variant'].indexOf('3d')!==-1){RG.setShadow(this,'rgba(0,0,0,0.35)',0,15,25);for(var i=prop['chart.variant.threed.depth'];i>0;i-=1){this.centery-=1;this.drawRose({storeAngles:false});RG.setShadow(this,'rgba(0,0,0,0)',0,0,0);for(var j=0,len=this.angles.length;j<len;j+=1){var a=this.angles[j];pa2(co,['b','m',a[4],a[5],'a',a[4],a[5],a[3]+1.5,a[0]-0.01,a[1]+0.01,false,'c','f','rgba(0,0,0,0.1)']);}}}\nthis.drawRose();this.drawLabels();co.strokeStyle='rgba(0,0,0,0)'\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nif(prop['chart.adjustable']){RG.AllowAdjusting(this);}\nRG.InstallEventListeners(this);if(prop['chart.segment.highlight']){if(!RG.allowSegmentHighlight){alert('[WARNING] The segment highlight function does not exist - have you included the dynamic library?');}\nRG.allowSegmentHighlight({object:this,count:typeof prop['chart.segment.highlight.count']==='number'?prop['chart.segment.highlight.count']:this.data.length,fill:prop['chart.segment.highlight.fill'],stroke:prop['chart.segment.highlight.stroke']});}\nif(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()\n{co.lineWidth=1;if(prop['chart.background.grid']){if(typeof(prop['chart.background.grid.count'])=='number'){prop['chart.background.grid.size']=this.radius/prop['chart.background.grid.count'];}\nco.beginPath();co.strokeStyle=prop['chart.background.grid.color'];for(var i=prop['chart.background.grid.size'];i<=this.radius;i+=prop['chart.background.grid.size']){co.moveTo(this.centerx+i,this.centery);co.arc(this.centerx,this.centery,i,0,RG.TWOPI,false);}\nco.stroke();co.beginPath();if(typeof prop['chart.background.grid.radials']!=='number'){prop['chart.background.grid.radials']=this.data.length}\nvar num=(360/prop['chart.background.grid.radials']);for(var i=num;i<=360;i+=num){co.arc(this.centerx,this.centery,this.radius,((i/(180/RG.PI))-RG.HALFPI)+this.startRadians,(((i+0.0001)/(180/RG.PI))-RG.HALFPI)+this.startRadians,false);co.lineTo(this.centerx,this.centery);}\nco.stroke();}\nif(prop['chart.background.axes']){co.beginPath();co.strokeStyle=prop['chart.background.axes.color'];co.moveTo(this.centerx-this.radius,ma.round(this.centery));co.lineTo(this.centerx+this.radius,ma.round(this.centery));co.moveTo(ma.round(this.centerx-this.radius),this.centery-5);co.lineTo(ma.round(this.centerx-this.radius),this.centery+5);co.moveTo(ma.round(this.centerx+this.radius),this.centery-5);co.lineTo(ma.round(this.centerx+this.radius),this.centery+5);for(var i=(this.centerx-this.radius);i<(this.centerx+this.radius);i+=(this.radius/5)){co.moveTo(ma.round(i),this.centery-3);co.lineTo(ma.round(i),this.centery+3.5);}\nfor(var i=(this.centery-this.radius);i<(this.centery+this.radius);i+=(this.radius/5)){co.moveTo(this.centerx-3,ma.round(i));co.lineTo(this.centerx+3,ma.round(i));}\nco.moveTo(ma.round(this.centerx),this.centery-this.radius);co.lineTo(ma.round(this.centerx),this.centery+this.radius);co.moveTo(this.centerx-5,ma.round(this.centery-this.radius));co.lineTo(this.centerx+5,ma.round(this.centery-this.radius));co.moveTo(this.centerx-5,ma.round(this.centery+this.radius));co.lineTo(this.centerx+5,ma.round(this.centery+this.radius));co.closePath();co.stroke();}\npa2(co,'b c');};this.drawRose=this.DrawRose=function()\n{var max=0,data=this.data,margin=RG.degrees2Radians(prop['chart.margin']),opt=arguments[0]||{};co.lineWidth=prop['chart.linewidth'];if(RG.isNull(prop['chart.ymax'])){for(var i=0;i<data.length;++i){if(typeof data[i]=='number'){max=ma.max(max,data[i]);}else if(typeof data[i]=='object'&&prop['chart.variant'].indexOf('non-equi-angular')!==-1){max=ma.max(max,data[i][0]);}else{max=ma.max(max,RG.arraySum(data[i]));}}\nthis.scale2=RG.getScale2(this,{'max':max,'min':0,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;}else{var ymax=prop['chart.ymax'];this.scale2=RG.getScale2(this,{'max':ymax,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max}\nthis.sum=RG.arraySum(data);co.moveTo(this.centerx,this.centery);co.stroke();if(prop['chart.colors.alpha']){co.globalAlpha=prop['chart.colors.alpha'];}\nvar sequentialIndex=0;if(typeof(prop['chart.variant'])=='string'&&prop['chart.variant'].indexOf('non-equi-angular')!==-1){var total=0;for(var i=0;i<data.length;++i){total+=data[i][1];}\nif(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nfor(var i=0;i<this.data.length;++i){var segmentRadians=((this.data[i][1]/total)*RG.TWOPI);var radius=((this.data[i][0]-prop['chart.ymin'])/(this.max-prop['chart.ymin']))*this.radius;radius=radius*prop['chart.animation.grow.multiplier'];co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][i];}\nco.beginPath();var startAngle=(this.startRadians*prop['chart.animation.roundrobin.factor'])-RG.HALFPI+margin;var endAngle=((this.startRadians+segmentRadians)*prop['chart.animation.roundrobin.factor'])-RG.HALFPI-margin;var exploded=this.getexploded(i,startAngle,endAngle,prop['chart.exploded']);var explodedX=exploded[0];var explodedY=exploded[1];co.arc(this.centerx+explodedX,this.centery+explodedY,prop['chart.animation.roundrobin.radius']?radius*prop['chart.animation.roundrobin.factor']:radius,startAngle,endAngle,0);co.lineTo(this.centerx+explodedX,this.centery+explodedY);co.closePath();co.stroke();co.fill();this.angles[i]=[startAngle,endAngle,0,prop['chart.animation.roundrobin.radius']?radius*prop['chart.animation.roundrobin.factor']:radius,this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];sequentialIndex++;this.startRadians+=segmentRadians;}\nif(prop['chart.shadow']){RG.noShadow(this);this.redrawRose();}}else{var sequentialColorIndex=0;if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nfor(var i=0;i<this.data.length;++i){var segmentRadians=(1/this.data.length)*RG.TWOPI;if(typeof this.data[i]=='number'){co.beginPath();co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][0];if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][i];}\nvar radius=((this.data[i]-prop['chart.ymin'])/(this.max-prop['chart.ymin']))*this.radius;radius=radius*prop['chart.animation.grow.multiplier'];var startAngle=(this.startRadians*prop['chart.animation.roundrobin.factor'])-RG.HALFPI+margin;var endAngle=(this.startRadians*prop['chart.animation.roundrobin.factor'])+(segmentRadians*prop['chart.animation.roundrobin.factor'])-RG.HALFPI-margin;var exploded=this.getexploded(i,startAngle,endAngle,prop['chart.exploded']);var explodedX=exploded[0];var explodedY=exploded[1];co.arc(this.centerx+explodedX,this.centery+explodedY,prop['chart.animation.roundrobin.radius']?radius*prop['chart.animation.roundrobin.factor']:radius,startAngle,endAngle,0);co.lineTo(this.centerx+explodedX,this.centery+explodedY);co.closePath();co.stroke();co.fill();co.beginPath();if(endAngle==0){}\nthis.angles[i]=[startAngle,endAngle,0,radius*prop['chart.animation.roundrobin.factor'],this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];sequentialIndex++;}else if(typeof(this.data[i])=='object'){var margin=prop['chart.margin']/(180/RG.PI);if(!this.angles2[i]){this.angles2[i]=[];}\nfor(var j=0;j<this.data[i].length;++j){var startAngle=(this.startRadians*prop['chart.animation.roundrobin.factor'])-RG.HALFPI+margin;var endAngle=(this.startRadians*prop['chart.animation.roundrobin.factor'])+(segmentRadians*prop['chart.animation.roundrobin.factor'])-RG.HALFPI-margin;var exploded=this.getexploded(i,startAngle,endAngle,prop['chart.exploded']);var explodedX=exploded[0];var explodedY=exploded[1];co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.colors'][j];if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][sequentialColorIndex++];}\nif(j==0){co.beginPath();var startRadius=0;var endRadius=((this.data[i][j]-prop['chart.ymin'])/(this.max-prop['chart.ymin']))*this.radius;endRadius=endRadius*prop['chart.animation.grow.multiplier'];co.arc(this.centerx+explodedX,this.centery+explodedY,prop['chart.animation.roundrobin.radius']?endRadius*prop['chart.animation.roundrobin.factor']:endRadius,startAngle,endAngle,0);co.lineTo(this.centerx+explodedX,this.centery+explodedY);co.closePath();co.stroke();co.fill();this.angles[sequentialIndex++]=[startAngle,endAngle,0,endRadius*prop['chart.animation.roundrobin.factor'],this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];this.angles2[i][j]=[startAngle,endAngle,0,endRadius*prop['chart.animation.roundrobin.factor'],this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];}else{co.beginPath();var startRadius=endRadius;var endRadius=(((this.data[i][j]-prop['chart.ymin'])/(this.max-prop['chart.ymin']))*this.radius)+startRadius;endRadius=endRadius*prop['chart.animation.grow.multiplier'];co.arc(this.centerx+explodedX,this.centery+explodedY,startRadius*prop['chart.animation.roundrobin.factor'],startAngle,endAngle,0);co.arc(this.centerx+explodedX,this.centery+explodedY,endRadius*prop['chart.animation.roundrobin.factor'],endAngle,startAngle,true);co.closePath();co.stroke();co.fill();this.angles[sequentialIndex++]=[startAngle,endAngle,startRadius*prop['chart.animation.roundrobin.factor'],endRadius*prop['chart.animation.roundrobin.factor'],this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];this.angles2[i][j]=[startAngle,endAngle,startRadius*prop['chart.animation.roundrobin.factor'],endRadius*prop['chart.animation.roundrobin.factor'],this.centerx+explodedX,this.centery+explodedY,co.strokeStyle,co.fillStyle];}}}\nthis.startRadians+=segmentRadians;}\nif(prop['chart.shadow']){RG.noShadow(this);}\nif(prop['chart.shadow']){this.redrawRose();}}\nif(prop['chart.colors.alpha']){co.globalAlpha=1;}\nif(prop['chart.title']){RG.drawTitle(this,prop['chart.title'],(ca.height/2)-this.radius,this.centerx,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);}};this.redrawRose=function()\n{var angles=this.angles;for(var i=0;i<angles.length;++i){pa2(co,'b a % % % % % false a % % % % % true c f % f % ',angles[i][4],angles[i][5],angles[i][2],angles[i][0],angles[i][1],angles[i][4],angles[i][5],angles[i][3],angles[i][1],angles[i][0],angles[i][6],angles[i][7]);}};this.drawLabels=this.DrawLabels=function()\n{co.lineWidth=1;var key=prop['chart.key'];if(key&&key.length){RG.DrawKey(this,key,prop['chart.colors']);}\nco.fillStyle=prop['chart.text.color'];co.strokeStyle='black';var radius=this.radius,font=prop['chart.text.font'],size=prop['chart.text.size'],axes=prop['chart.labels.axes'].toLowerCase(),decimals=prop['chart.scale.decimals'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],centerx=this.centerx,centery=this.centery+(prop['chart.variant'].indexOf('3d')!==-1?prop['chart.variant.threed.depth']:0);if(typeof prop['chart.labels']=='object'&&prop['chart.labels']){this.DrawCircularLabels(co,prop['chart.labels'],font,size,radius+10);}\nif(typeof(prop['chart.text.size.scale'])=='number'){size=prop['chart.text.size.scale'];}\nvar color='rgba(255,255,255,0.8)';if(axes.indexOf('n')>-1){if(prop['chart.background.axes']){var offset=-10;var halign='right';}else{var offset=0;var halign='center';}\nfor(var i=0;i<prop['chart.labels.count'];++i){RG.text2(this,{'font':font,'size':size,'x':centerx+offset,'y':centery-(radius*((i+1)/prop['chart.labels.count'])),'text':this.scale2.labels[i],'valign':'center','halign':halign,'bounding':true,'bounding.fill':color,'bounding.stroke':prop['chart.labels.boxed']?'black':'rgba(0,0,0,0)','tag':'scale'});}}\nif(axes.indexOf('s')>-1){if(prop['chart.background.axes']){var offset=-10;var halign='right';}else{var offset=0;var halign='center';}\nfor(var i=0;i<prop['chart.labels.count'];++i){RG.Text2(this,{'font':font,'size':size,'x':centerx+offset,'y':centery+(radius*((i+1)/prop['chart.labels.count'])),'text':this.scale2.labels[i],'valign':'center','halign':halign,'bounding':true,'bounding.fill':color,'bounding.stroke':prop['chart.labels.boxed']?'black':'rgba(0,0,0,0)','tag':'scale'});}}\nif(axes.indexOf('e')>-1){for(var i=0;i<prop['chart.labels.count'];++i){if(prop['chart.background.axes']){var offset=10;var valign='top';}else{var offset=0;var valign='center';}\nRG.Text2(this,{'font':font,'size':size,'x':centerx+(radius*((i+1)/prop['chart.labels.count'])),'y':centery+offset,'text':this.scale2.labels[i],'valign':valign,'halign':'center','bounding':true,'bounding.fill':color,'bounding.stroke':prop['chart.labels.boxed']?'black':'rgba(0,0,0,0)','tag':'scale'});}}\nif(axes.indexOf('w')>-1){for(var i=0;i<prop['chart.labels.count'];++i){if(prop['chart.background.axes']){var offset=10;var valign='top';}else{var offset=0;var valign='center';}\nRG.Text2(this,{'font':font,'size':size,'x':centerx-(radius*((i+1)/prop['chart.labels.count'])),'y':centery+offset,'text':this.scale2.labels[i],'valign':valign,'halign':'center','bounding':true,'bounding.fill':color,'bounding.stroke':prop['chart.labels.boxed']?'black':'rgba(0,0,0,0)','tag':'scale'});}}\nif(RG.trim(axes).length>0){RG.Text2(this,{'font':font,'size':size,'x':centerx,'y':centery,'text':typeof prop['chart.ymin']==='number'?RG.numberFormat(this,Number(prop['chart.ymin']).toFixed(prop['chart.ymin']===0?'0':prop['chart.scale.decimals']),units_pre,units_post):'0','valign':'center','halign':'center','bounding':true,'bounding.fill':color,'bounding.stroke':prop['chart.labels.boxed']?'black':'rgba(0,0,0,0)','tag':'scale'});}};this.drawCircularLabels=this.DrawCircularLabels=function(co,labels,font,size,radius)\n{var variant=prop['chart.variant'],position=prop['chart.labels.position'],radius=radius+5+prop['chart.labels.offset'],centerx=this.centerx,centery=this.centery+(prop['chart.variant'].indexOf('3d')!==-1?prop['chart.variant.threed.depth']:0),labelsColor=prop['chart.labels.color']||prop['chart.text.color'],angles=this.angles\nfor(var i=0;i<this.data.length;++i){if(typeof(variant)=='string'&&variant.indexOf('non-equi-angular')!==-1){var a=Number(angles[i][0])+((angles[i][1]-angles[i][0])/2);}else{var a=(RG.TWOPI/this.data.length)*(i+1)-(RG.TWOPI/(this.data.length*2));var a=a-RG.HALFPI+(prop['chart.labels.position']=='edge'?((RG.TWOPI/this.data.length)/2):0);}\nvar x=centerx+(ma.cos(a)*radius);var y=centery+(ma.sin(a)*radius);if(x>centerx){halign='left';}else if(Math.round(x)==centerx){halign='center';}else{halign='right';}\nRG.text2(this,{'color':labelsColor,'font':font,'size':size,'x':x,'y':y,'text':String(labels[i]),'halign':halign,'valign':'center','tag':'labels'});}};this.getShape=this.getSegment=function(e)\n{RG.fixEventObject(e);var angles=this.angles;var ret=[];var opt=arguments[1]?arguments[1]:{radius:true};for(var i=0;i<angles.length;++i){var angleStart=angles[i][0];var angleEnd=angles[i][1];var radiusStart=opt.radius===false?0:angles[i][2];var radiusEnd=opt.radius===false?this.radius:angles[i][3];var centerX=angles[i][4];var centerY=angles[i][5];var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0]-centerX;var mouseY=mouseXY[1]-centerY;co.beginPath();co.arc(centerX,centerY,radiusStart?radiusStart:0.01,angleStart,angleEnd,false);co.arc(centerX,centerY,radiusEnd,angleEnd,angleStart,true);co.closePath();if(co.isPointInPath(mouseXY[0],mouseXY[1])){angles[i][6]=i;if(RG.parseTooltipText){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],angles[i][6]);}\nangles[i]['object']=this;angles[i]['x']=angles[i][4];angles[i]['y']=angles[i][5];angles[i]['angle.start']=angles[i][0];angles[i]['angle.end']=angles[i][1];angles[i]['radius.start']=angles[i][2];angles[i]['radius.end']=angles[i][3];angles[i]['index']=angles[i][6];angles[i]['tooltip']=tooltip?tooltip:null;return angles[i];}}\nreturn null;};this.getExploded=this.getexploded=function(index,startAngle,endAngle,exploded)\n{var explodedx,explodedy;if(typeof(exploded)=='object'&&typeof(exploded[index])=='number'){explodedx=Math.cos(((endAngle-startAngle)/2)+startAngle)*exploded[index];explodedy=Math.sin(((endAngle-startAngle)/2)+startAngle)*exploded[index];}else if(typeof(exploded)=='number'){explodedx=Math.cos(((endAngle-startAngle)/2)+startAngle)*exploded;explodedy=Math.sin(((endAngle-startAngle)/2)+startAngle)*exploded;}else{explodedx=0;explodedy=0;}\nreturn[explodedx,explodedy];};this.allowTooltips=this.AllowTooltips=function()\n{RG.PreLoadTooltipImages(this);RG.InstallWindowMousedownTooltipListener(this);RG.InstallCanvasMousemoveTooltipListener(this);RG.InstallCanvasMouseupTooltipListener(this);};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);return;}\nco.beginPath();co.strokeStyle=prop['chart.highlight.stroke'];co.fillStyle=prop['chart.highlight.fill'];co.arc(shape['x'],shape['y'],shape['radius.end'],shape['angle.start'],shape['angle.end'],false);if(shape['radius.start']>0){co.arc(shape['x'],shape['y'],shape['radius.start'],shape['angle.end'],shape['angle.start'],true);}else{co.lineTo(shape['x'],shape['y']);}\nco.closePath();co.stroke();co.fill();}};this.getObjectByXY=function(e)\n{var mouseXY=RGraph.getMouseXY(e);var radius=RG.getHypLength(this.centerx,this.centery,mouseXY[0],mouseXY[1]);if(prop['chart.variant'].indexOf('3d')!==-1){radius/=-1;}\nif(mouseXY[0]>(this.centerx-this.radius)&&mouseXY[0]<(this.centerx+this.radius)&&mouseXY[1]>(this.centery-this.radius)&&mouseXY[1]<(this.centery+this.radius)&&radius<=this.radius){return this;}};this.getRadius=function(value)\n{if(value<0||value>this.max){return null;}\nvar r=(value/this.max)*this.radius;return r;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.key.colors']=RG.array_clone(prop['chart.key.colors']);this.original_colors['chart.text.color']=RG.array_clone(prop['chart.text.color']);this.original_colors['chart.title.color']=RG.array_clone(prop['chart.title.color']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);}\nfor(var i=0;i<prop['chart.colors'].length;++i){prop['chart.colors'][i]=this.parseSingleColorForGradient(prop['chart.colors'][i]);}\nif(!RG.is_null(prop['chart.key.colors'])){for(var i=0;i<prop['chart.key.colors'].length;++i){prop['chart.key.colors'][i]=this.parseSingleColorForGradient(prop['chart.key.colors'][i]);}}\nprop['chart.text.color']=this.parseSingleColorForGradient(prop['chart.text.color']);prop['chart.title.color']=this.parseSingleColorForGradient(prop['chart.title.color']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.segment.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.segment.highlight.stroke']);prop['chart.segment.highlight.fill']=this.parseSingleColorForGradient(prop['chart.segment.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{var segments=this.angles2;for(var i=0;i<this.angles2.length;i+=1){co.beginPath();co.lineWidth=2;co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.arc(segments[i][index][4],segments[i][index][5],segments[i][index][2],segments[i][index][0],segments[i][index][1],false);co.arc(segments[i][index][4],segments[i][index][5],segments[i][index][3],segments[i][index][1],segments[i][index][0],true);co.closePath();co.fill();co.stroke();}\nreturn};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.explode=function()\n{var obj=this;var opt=arguments[0]||{};var callback=arguments[1]||function(){};var frames=opt.frames?opt.frames:30;var frame=0;var explodedMax=ma.max(ca.width,ca.height);var exploded=Number(this.Get('exploded'));function iterator()\n{exploded=(frame/frames)*explodedMax;obj.Set('exploded',exploded);RG.clear(ca);RG.redrawCanvas(ca);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.roundrobin=this.roundRobin=function()\n{var obj=this;var opt=arguments[0]||{}\nvar frames=opt.frames||30;var frame=0;var original_margin=prop['chart.margin'];var margin=(360/this.data.length)/2;var callback=arguments[1]||function(){};this.Set('chart.margin',margin);this.Set('chart.animation.roundrobin.factor',0);function iterator()\n{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){obj.set('animation.roundrobin.factor',frame/frames);obj.set('margin',(frame/frames)*original_margin);RG.Effects.updateCanvas(iterator);}else{obj.set('animation.roundrobin.factor',1);obj.set('margin',original_margin);callback(obj);}}\niterator();return this;};this.implode=function()\n{var obj=this;var opt=arguments[0]||{};var callback=arguments[1]||function(){};var frames=opt.frames||30;var frame=0;var explodedMax=ma.max(ca.width,ca.height);var exploded=explodedMax;function iterator()\n{exploded=explodedMax-((frame/frames)*explodedMax);obj.Set('exploded',exploded);RG.clear(ca);RG.redrawCanvas(ca);if(frame++<frames){RG.Effects.updateCanvas(iterator);}else{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);callback(obj);}}\niterator();return this;};this.grow=function()\n{var obj=this;var opt=arguments[0]||{};var callback=arguments[1]||function(){};var frames=opt.frames||30;var frame=0;function iterator()\n{obj.Set('animation.grow.multiplier',frame/frames);RG.clear(ca);RG.redrawCanvas(ca);if(frame<frames){frame++;RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.rscatter.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.RScatter=RGraph.Rscatter=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;this.data=new Array(conf.data.length);this.data=RGraph.arrayClone(conf.data);if(typeof conf.data==='object'&&typeof conf.data[0]==='object'&&typeof conf.data[0][0]==='number'){var tmp=RGraph.arrayClone(conf.data);conf.data=new Array();conf.data[0]=RGraph.arrayClone(tmp);this.data=RGraph.arrayClone(conf.data);}}else{var conf={id:conf};conf.data=arguments[1];this.data=[];if(arguments[1][0]&&arguments[1][0][0]&&typeof arguments[1][0][0]=='object'){for(var i=0;i<arguments[1].length;++i){this.data[i]=arguments[1][i];}}else{for(var i=1;i<arguments.length;++i){this.data[i-1]=RGraph.arrayClone(arguments[i]);}}}\nthis.id=conf.id\nthis.canvas=document.getElementById(this.id)\nthis.context=this.canvas.getContext?this.canvas.getContext(\"2d\"):null;this.canvas.__object__=this;this.type='rscatter';this.hasTooltips=false;this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.centerx=0;this.centery=0;this.radius=0;this.max=0;for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j][0]==='string'){this.data[i][j][0]=parseFloat(this.data[i][j][0]);}\nif(typeof this.data[i][j][1]==='string'){this.data[i][j][1]=parseFloat(this.data[i][j][1]);}}}\nthis.properties={'chart.background.color':'transparent','chart.background.grid':true,'chart.background.grid.diagonals':true,'chart.background.grid.diagonals.count':null,'chart.background.grid.radials':true,'chart.background.grid.radials.count':null,'chart.background.grid.linewidth':1,'chart.background.grid.color':'#ccc','chart.radius':null,'chart.colors':[],'chart.colors.default':'black','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels':null,'chart.labels.color':null,'chart.labels.axes':'n','chart.labels.axes.background':'rgba(255,255,255,0.8)','chart.labels.count':5,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.fill':'rgba(255,0,0,0.9)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.contextmenu':null,'chart.tooltips':null,'chart.tooltips.event':'onmousemove','chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.hotspot':3,'chart.tooltips.coords.page':false,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.background':null,'chart.ymax':null,'chart.ymin':0,'chart.tickmarks':'cross','chart.ticksize':3,'chart.scale.decimals':null,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.round':false,'chart.scale.zerostart':true,'chart.units.pre':'','chart.units.post':'','chart.events.mousemove':null,'chart.events.click':null,'chart.highlight.stroke':'transparent','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.highlight.point.radius':3,'chart.axes.color':'transparent','chart.axes.numticks':null,'chart.axes.caps':true,'chart.segment.highlight':false,'chart.segment.highlight.count':null,'chart.segment.highlight.fill':'rgba(0,255,0,0.5)','chart.segment.highlight.stroke':'rgba(0,0,0,0)','chart.line':false,'chart.line.close':false,'chart.line.linewidth':1,'chart.line.colors':['black'],'chart.line.shadow':false,'chart.line.shadow.color':'black','chart.line.shadow.blur':2,'chart.line.shadow.offsetx':3,'chart.line.shadow.offsety':3,'chart.clearto':'rgba(0,0,0,0)'}\nfor(var i=0,idx=0;i<this.data.length;++i){for(var j=0,len=this.data[i].length;j<len;j+=1,idx+=1){this['$'+idx]={}}}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name,value)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name==='chart.segments.highlight')name='chart.segment.highlight';if(name==='chart.segments.highlight.count')name='chart.segment.highlight.count';if(name==='chart.segments.highlight.fill')name='chart.segment.highlight.fill';if(name==='chart.segments.highlight.stroke')name='chart.segment.highlight.stroke';prop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=(Math.min(ca.width-this.gutterLeft-this.gutterRight,ca.height-this.gutterTop-this.gutterBottom)/2);this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.coords=[];this.coords2=[];this.coordsText=[];if(typeof(prop['chart.centerx'])=='number')this.centerx=prop['chart.centerx'];if(typeof(prop['chart.centery'])=='number')this.centery=prop['chart.centery'];if(typeof(prop['chart.radius'])=='number')this.radius=prop['chart.radius'];if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nvar max=prop['chart.ymax'];var min=prop['chart.ymin'];if(typeof(max)=='number'){this.max=max;this.scale2=RG.getScale2(this,{'max':max,'min':min,'strict':true,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});}else{for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){this.max=Math.max(this.max,this.data[i][j][1]);}}\nthis.min=prop['chart.ymin'];this.scale2=RG.getScale2(this,{'max':this.max,'min':min,'scale.decimals':Number(prop['chart.scale.decimals']),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.labels.count']});this.max=this.scale2.max;}\nif(prop['chart.key']&&prop['chart.key'].length>0&&prop['chart.key'].length>=3){this.centerx=this.centerx-prop['chart.gutter.right']+5;}\nif(typeof(prop['chart.key'])=='object'&&RG.is_array(prop['chart.key'])&&prop['chart.key'][0]){prop['chart.colors']=[];for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){if(typeof this.data[i][j][2]=='string'){prop['chart.colors'].push(this.data[i][j][2]);}}}}\nthis.Set('chart.tooltips',[]);for(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){if(typeof this.data[i][j][3]=='string'){prop['chart.tooltips'].push(this.data[i][j][3]);}}}\nco.beginPath();this.DrawBackground();this.DrawRscatter();this.DrawLabels();if(key&&key.length){RG.drawKey(this,key,prop['chart.colors']);}\nif(prop['chart.contextmenu']){RG.showContext(this);}\nif(prop['chart.title']){RG.DrawTitle(this,prop['chart.title'],this.centery-this.radius-10,this.centerx,prop['chart.title.size']?prop['chart.title.size']:prop['chart.text.size']+2);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(prop['chart.segment.highlight']){RG.allowSegmentHighlight({object:this,count:typeof prop['chart.segment.highlight.count']==='number'?prop['chart.segment.highlight.count']:((prop['chart.background.grid.diagonals.count']?prop['chart.background.grid.diagonals.count']:(prop['chart.labels']?prop['chart.labels'].length:8))),fill:prop['chart.segment.highlight.fill'],stroke:prop['chart.segment.highlight.stroke']});}\nif(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()\n{if(prop['chart.background.color']!='transparent'){pa2(co,['b','a',this.centerx,this.centery,this.radius,0,2*ma.PI,-1,'f',prop['chart.background.color']]);}\nvar gridEnabled=prop['chart.background.grid'];if(gridEnabled){co.lineWidth=prop['chart.background.grid.linewidth'];if(prop['chart.background.grid.radials']){co.strokeStyle=prop['chart.background.grid.color'];if(RG.isNull(prop['chart.background.grid.radials.count'])){prop['chart.background.grid.radials.count']=prop['chart.labels.count'];}\nvar r=this.radius/prop['chart.background.grid.radials.count'];for(var i=0,len=this.radius;i<=len;i+=r){co.arc(this.centerx,this.centery,i,0,RG.TWOPI,0);}\nco.stroke();}\nif(prop['chart.background.grid.diagonals']){co.strokeStyle=prop['chart.background.grid.color'];co.beginPath();var inc=360/((prop['chart.background.grid.diagonals.count']?prop['chart.background.grid.diagonals.count']:(prop['chart.labels']?prop['chart.labels'].length:8)));for(var i=inc;i<360;i+=inc){co.arc(this.centerx,this.centery,this.radius,(i/(180/RG.PI))-RG.HALFPI,((i+0.01)/(180/RG.PI))-RG.HALFPI,0);co.lineTo(this.centerx,this.centery);}\nco.stroke();}}\nco.lineWidth=1;co.beginPath();co.strokeStyle=prop['chart.axes.color'];co.moveTo(this.centerx-this.radius,Math.round(this.centery));co.lineTo(this.centerx+this.radius,Math.round(this.centery));if(prop['chart.axes.caps']){co.moveTo(ma.round(this.centerx-this.radius),this.centery-5);co.lineTo(ma.round(this.centerx-this.radius),this.centery+5);co.moveTo(ma.round(this.centerx+this.radius),this.centery-5);co.lineTo(ma.round(this.centerx+this.radius),this.centery+5);}\nif(!RG.isNull(prop['chart.axes.numticks'])){var numticks=prop['chart.axes.numticks']}else{var numticks=prop['chart.labels.count'];}\nvar caps=prop['chart.axes.caps'];if(numticks){for(var i=(this.centerx-this.radius);i<(this.centerx+this.radius);i+=(this.radius/numticks)){co.moveTo(ma.round(i),this.centery-3);co.lineTo(ma.round(i),this.centery+3);}\nfor(var i=(this.centery-this.radius);i<(this.centery+this.radius);i+=(this.radius/numticks)){co.moveTo(this.centerx-3,ma.round(i));co.lineTo(this.centerx+3,ma.round(i));}}\nco.moveTo(ma.round(this.centerx),this.centery-this.radius);co.lineTo(ma.round(this.centerx),this.centery+this.radius);if(prop['chart.axes.caps']){co.moveTo(this.centerx-5,ma.round(this.centery-this.radius));co.lineTo(this.centerx+5,ma.round(this.centery-this.radius));co.moveTo(this.centerx-5,ma.round(this.centery+this.radius));co.lineTo(this.centerx+5,ma.round(this.centery+this.radius));}\nco.closePath();co.stroke();};this.drawRscatter=this.DrawRscatter=function()\n{for(var dataset=0;dataset<this.data.length;dataset+=1){var data=this.data[dataset];this.coords2[dataset]=[];var drawPoints=function(obj)\n{for(var i=0;i<data.length;++i){var d1=data[i][0],d2=data[i][1],a=d1/(180/RG.PI),r=((d2-prop['chart.ymin'])/(obj.scale2.max-obj.scale2.min))*obj.radius,x=ma.sin(a)*r,y=ma.cos(a)*r,color=data[i][2]?data[i][2]:prop['chart.colors.default'],tooltip=data[i][3]?data[i][3]:null\nif(tooltip&&String(tooltip).length){obj.hasTooltips=true;}\nx=x+obj.centerx;y=obj.centery-y;obj.drawTick(x,y,color);obj.coords.push([x,y,color,tooltip]);obj.coords2[dataset].push([x,y,color,tooltip]);}}\ndrawPoints(this);if(prop['chart.line']){this.drawLine(dataset);}}};this.drawLine=function(idx)\n{var opt={dataset:idx,coords:this.coords2[idx],color:prop['chart.line.colors'][idx],shadow:prop['chart.line.shadow'],shadowColor:prop['chart.line.shadow.color'],shadowOffsetX:prop['chart.line.shadow.offsetx'],shadowOffsetY:prop['chart.line.shadow.offsety'],shadowBlur:prop['chart.line.shadow.blur'],linewidth:prop['chart.line.linewidth']};co.beginPath();co.strokeStyle=this.parseSingleColorForGradient(opt.color);co.lineWidth=typeof prop['chart.line.linewidth']==='object'?prop['chart.line.linewidth'][idx]:prop['chart.line.linewidth'];co.lineCap='round';if(opt.shadow){RG.setShadow(this,opt.shadowColor,opt.shadowOffsetX,opt.shadowOffsetY,opt.shadowBlur);}\nfor(var i=0;i<this.coords2[idx].length;++i){if(i===0){co.moveTo(this.coords2[idx][i][0],this.coords2[idx][i][1]);var startCoords=RG.arrayClone(this.coords2[idx]);}else{co.lineTo(this.coords2[idx][i][0],this.coords2[idx][i][1]);}}\nif((typeof prop['chart.line.close']==='boolean'&&prop['chart.line.close'])||(typeof prop['chart.line.close']==='object'&&prop['chart.line.close'][idx])){co.lineTo(this.coords2[idx][0][0],this.coords2[idx][0][1]);}\nco.stroke();RG.noShadow(this);};this.drawLabels=this.DrawLabels=function()\n{co.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';var key=prop['chart.key'];var r=this.radius;var axesColor=prop['chart.axes.color'];var italic=prop['chart.text.italic'];var bold=prop['chart.text.bold'];var color=prop['chart.text.color'];var font=prop['chart.text.font'];var size=prop['chart.text.size'];var axes=prop['chart.labels.axes'].toLowerCase();var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var decimals=prop['chart.scale.decimals'];var centerx=this.centerx;var centery=this.centery;co.fillStyle=prop['chart.text.color'];if(typeof prop['chart.labels']=='object'&&prop['chart.labels']){this.DrawCircularLabels(co,prop['chart.labels'],font,size,r);}\nvar offset=10;var centered=false;if(axesColor==='rgba(0,0,0,0)'||axesColor==='rgb(0,0,0)'||axesColor==='transparent'){offset=0;centered=true;}\nfor(var i=0,len=this.scale2.labels.length;i<len;++i){if(axes.indexOf('n')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-offset,'y':centery-(r*((i+1)/len)),'text':this.scale2.labels[i],'valign':'center','halign':centered?'center':'right',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)',bold:bold,italic:italic});if(axes.indexOf('s')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-offset,'y':centery+(r*((i+1)/len)),'text':this.scale2.labels[i],'valign':'center','halign':centered?'center':'right',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)',bold:bold,italic:italic});if(axes.indexOf('e')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx+(r*((i+1)/len)),'y':centery+offset,'text':this.scale2.labels[i],'valign':centered?'center':'top','halign':'center',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)',bold:bold,italic:italic});if(axes.indexOf('w')>-1)RG.text2(this,{'tag':'scale','font':font,'size':size,'x':centerx-(r*((i+1)/len)),'y':centery+offset,'text':this.scale2.labels[i],'valign':centered?'center':'top','halign':'center',bounding:true,boundingFill:prop['chart.labels.axes.background'],boundingStroke:'rgba(0,0,0,0)',bold:bold,italic:italic});}\nif(prop['chart.labels.axes'].length>0&&prop['chart.scale.zerostart']){RG.text2(this,{'font':font,'size':size,'x':centerx,'y':centery,'text':RG.numberFormat(this,Number(this.scale2.min).toFixed(this.scale2.decimals),this.scale2.units_pre,this.scale2.units_post),'valign':'center','halign':'center','bounding':true,'boundingFill':prop['chart.labels.axes.background'],'boundingStroke':'rgba(0,0,0,0)','tag':'scale',italic:italic,bold:bold});}};this.drawCircularLabels=this.DrawCircularLabels=function(context,labels,font_face,font_size,r)\n{var r=r+10,color=prop['chart.labels.color'];for(var i=0;i<labels.length;++i){var a=(360/labels.length)*(i+1)-(360/(labels.length*2));var a=a-90+(prop['chart.labels.position']=='edge'?((360/labels.length)/2):0);var x=ma.cos(a/(180/RG.PI))*r;var y=ma.sin(a/(180/RG.PI))*r;RG.Text2(this,{'color':color,'font':font_face,'size':font_size,'x':this.centerx+x,'y':this.centery+y,'text':String(labels[i]),'valign':'center','halign':((this.centerx+x)>this.centerx)?'left':'right','tag':'labels'});}};this.drawTick=this.DrawTick=function(x,y,color)\n{var tickmarks=prop['chart.tickmarks'];var ticksize=prop['chart.ticksize'];co.strokeStyle=color;co.fillStyle=color;var prevLinewidth=co.lineWidth;co.lineWidth=1;if(tickmarks=='cross'){co.beginPath();co.moveTo(x+ticksize,y+ticksize);co.lineTo(x-ticksize,y-ticksize);co.stroke();co.beginPath();co.moveTo(x-ticksize,y+ticksize);co.lineTo(x+ticksize,y-ticksize);co.stroke();}else if(tickmarks=='circle'){co.beginPath();co.arc(x,y,ticksize,0,6.2830,false);co.fill();}else if(tickmarks=='square'){co.beginPath();co.fillRect(x-ticksize,y-ticksize,2*ticksize,2*ticksize);co.fill();}else if(tickmarks=='diamond'){co.beginPath();co.moveTo(x,y-ticksize);co.lineTo(x+ticksize,y);co.lineTo(x,y+ticksize);co.lineTo(x-ticksize,y);co.closePath();co.fill();}else if(tickmarks=='plus'){co.lineWidth=1;co.beginPath();co.moveTo(x,y-ticksize);co.lineTo(x,y+ticksize);co.moveTo(x-ticksize,y);co.lineTo(x+ticksize,y);co.stroke();}\nco.lineWidth=prevLinewidth;};this.getShape=this.getPoint=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var overHotspot=false;var offset=prop['chart.tooltips.hotspot'];for(var i=0,len=this.coords.length;i<len;++i){var x=this.coords[i][0];var y=this.coords[i][1];var tooltip=this.coords[i][3];if(mouseX<(x+offset)&&mouseX>(x-offset)&&mouseY<(y+offset)&&mouseY>(y-offset)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,1:x,2:y,3:i,'object':this,'x':x,'y':y,'index':i,'tooltip':tooltip};}}};this.allowTooltips=this.AllowTooltips=function()\n{RG.PreLoadTooltipImages(this);RG.InstallWindowMousedownTooltipListener(this);RG.InstallCanvasMousemoveTooltipListener(this);RG.InstallCanvasMouseupTooltipListener(this);};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Point(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var centerx=this.centerx;var centery=this.centery;var radius=this.radius;if(mouseX>(centerx-radius)&&mouseX<(centerx+radius)&&mouseY>(centery-radius)&&mouseY<(centery+radius)){return this;}};this.getRadius=function(value)\n{var max=this.max;if(value<0||value>max){return null;}\nvar r=(value/max)*this.radius;return r;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['data']=RG.array_clone(this.data);this.original_colors['chart.highlight.stroke']=RG.arrayClone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.arrayClone(prop['chart.highlight.fill']);this.original_colors['chart.colors.default']=RG.arrayClone(prop['chart.colors.default']);this.original_colors['chart.background.grid.color']=RG.arrayClone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.arrayClone(prop['chart.background.color']);this.original_colors['chart.segment.highlight.stroke']=RG.arrayClone(prop['chart.segment.highlight.stroke']);this.original_colors['chart.segment.highlight.fill']=RG.arrayClone(prop['chart.segment.highlight.fill']);}\nfor(var i=0;i<this.data.length;i+=1){for(var j=0,len=this.data[i].length;j<len;j+=1){this.data[i][j][2]=this.parseSingleColorForGradient(this.data[i][j][2]);}}\nprop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.colors.default']=this.parseSingleColorForGradient(prop['chart.colors.default']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.segment.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.segment.highlight.stroke']);prop['chart.segment.highlight.fill']=this.parseSingleColorForGradient(prop['chart.segment.highlight.fill']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof color!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createRadialGradient(this.centerx,this.centery,0,this.centerx,this.centery,this.radius);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{if(this.coords2&&this.coords2[index]&&this.coords2[index].length){this.coords2[index].forEach(function(value,idx,arr)\n{co.beginPath();co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.arc(value[0],value[1],prop['chart.ticksize']+2,0,RG.TWOPI,false);co.fill();});}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.resetColorsToOriginalValues=function()\n{for(var i=0,len=this.original_colors['data'].length;i<len;++i){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j][2]=RG.array_clone(this.original_colors['data'][i][j][2]);}}};this.firstDrawFunc=function()\n{};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.scatter.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Scatter=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;this.data=new Array(conf.data.length);this.data=RGraph.arrayClone(conf.data);if(typeof conf.data==='object'&&typeof conf.data[0]==='object'&&(typeof conf.data[0][0]==='number'||typeof conf.data[0][0]==='string')){var tmp=RGraph.arrayClone(conf.data);conf.data=new Array();conf.data[0]=RGraph.arrayClone(tmp);this.data=RGraph.arrayClone(conf.data);}}else{var conf={id:conf};conf.data=arguments[1];this.data=[];if(arguments[1][0]&&arguments[1][0][0]&&typeof arguments[1][0][0]=='object'){for(var i=0;i<arguments[1].length;++i){this.data[i]=RGraph.arrayClone(arguments[1][i]);}}else{for(var i=1;i<arguments.length;++i){this.data[i-1]=RGraph.arrayClone(arguments[i]);}}}\nif(!RGraph.isArray(this.data[0][0])){this.data=[this.data];}\nfor(var i=0,len=this.data.length;i<len;++i){for(var j=0,len2=this.data[i].length;j<len2;++j){if(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][0]==='string'){if(this.data[i][j][0].match(/^[.0-9]+$/)){this.data[i][j][0]=parseFloat(this.data[i][j][0]);}else if(this.data[i][j][0]===''){this.data[i][j][0]=0;}}\nif(typeof this.data[i][j]==='object'&&!RGraph.isNull(this.data[i][j])&&typeof this.data[i][j][1]==='string'){if(this.data[i][j][1].match(/[.0-9]+/)){this.data[i][j][1]=parseFloat(this.data[i][j][1]);}else if(this.data[i][j][1]===''){this.data[i][j][1]=0;}}}}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.canvas.__object__=this;this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.max=0;this.coords=[];this.type='scatter';this.isRGraph=true;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.width':1,'chart.background.grid.color':'#ddd','chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.hbars':null,'chart.background.vbars':null,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':20,'chart.background.image':null,'chart.background.image.stretch':true,'chart.background.image.x':null,'chart.background.image.y':null,'chart.background.image.w':null,'chart.background.image.h':null,'chart.background.image.align':null,'chart.background.color':null,'chart.text.size':12,'chart.text.angle':0,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.tooltips':[],'chart.tooltips.effect':'fade','chart.tooltips.event':'onmousemove','chart.tooltips.hotspot':3,'chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.coords.page':false,'chart.units.pre':'','chart.units.post':'','chart.numyticks':10,'chart.tickmarks':'cross','chart.tickmarks.image.halign':'center','chart.tickmarks.image.valign':'center','chart.tickmarks.image.offsetx':0,'chart.tickmarks.image.offsety':0,'chart.ticksize':5,'chart.numxticks':true,'chart.xaxis':true,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':30,'chart.colors.bubble.graduated':true,'chart.xmin':0,'chart.xmax':0,'chart.ymax':null,'chart.ymin':0,'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.zerostart':true,'chart.title':'','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.xaxis':'','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.color':null,'chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':null,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.labels':[],'chart.labels.bold':false,'chart.labels.color':null,'chart.labels.ingraph':null,'chart.labels.above':false,'chart.labels.above.size':8,'chart.labels.above.decimals':0,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.ylabels.offsetx':0,'chart.ylabels.offsety':0,'chart.ylabels':true,'chart.ylabels.count':5,'chart.ylabels.invert':false,'chart.ylabels.specific':null,'chart.ylabels.inside':false,'chart.contextmenu':null,'chart.defaultcolor':'black','chart.xaxispos':'bottom','chart.yaxispos':'left','chart.crosshairs':false,'chart.crosshairs.color':'#333','chart.crosshairs.linewidth':1,'chart.crosshairs.coords':false,'chart.crosshairs.coords.fixed':true,'chart.crosshairs.coords.fadeout':false,'chart.crosshairs.coords.labels.x':'X','chart.crosshairs.coords.labels.y':'Y','chart.crosshairs.coords.formatter.x':null,'chart.crosshairs.coords.formatter.y':null,'chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.annotatable':false,'chart.annotate.color':'black','chart.line':false,'chart.line.linewidth':1,'chart.line.colors':['green','red','blue','orange','pink','brown','black','gray'],'chart.line.shadow.color':'rgba(0,0,0,0)','chart.line.shadow.blur':2,'chart.line.shadow.offsetx':3,'chart.line.shadow.offsety':3,'chart.line.stepped':false,'chart.line.visible':true,'chart.noaxes':false,'chart.noyaxis':false,'chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.fill':'rgba(255,0,0,0.9)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.text.color':'black','chart.axis.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.boxplot.width':1,'chart.boxplot.capped':true,'chart.resizable':false,'chart.resize.handle.background':null,'chart.xmin':0,'chart.labels.specific.align':'left','chart.xscale':false,'chart.xscale.units.pre':'','chart.xscale.units.post':'','chart.xscale.numlabels':10,'chart.xscale.formatter':null,'chart.xscale.decimals':0,'chart.xscale.thousand':',','chart.xscale.point':'.','chart.noendxtick':false,'chart.noendytick':true,'chart.events.mousemove':null,'chart.events.click':null,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)','chart.animation.trace':false,'chart.animation.trace.clip':1}\nfor(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(RGraph.isNull(this.data[i][j])){this.data[i][j]=[];}\nif(this.data[i][j]&&typeof(this.data[i][j][0])=='string'){this.data[i][j][0]=RGraph.parseDate(this.data[i][j][0]);}}}\nthis.data_arr=[];for(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){this.data_arr.push(this.data[i][j]);}}\nfor(var i=0;i<this.data_arr.length;++i){this['$'+i]={}}\nif(!this.canvas){alert('[SCATTER] No canvas support');return;}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name==='chart.xticks'){name='chart.numxticks';}\nif(name=='chart.line.colors'){prop['chart.colors']=value;}\nif(name=='chart.tooltip.hotspot'){name='chart.tooltips.hotspot';}\nif(name=='chart.yaxispos'&&value!='left'&&value!='right'){alert(\"[SCATTER] chart.yaxispos should be left or right. You've set it to: '\"+value+\"' Changing it to left\");value='left';}\nif(name=='chart.xaxispos'){if(value!='bottom'&&value!='center'){alert('[SCATTER] ('+this.id+') chart.xaxispos should be center or bottom. Tried to set it to: '+value+' Changing it to center');value='center';}}\nif(name=='chart.noxaxis'){name='chart.xaxis';value=!value;}\nprop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name];};this.draw=this.Draw=function()\n{if(typeof prop['chart.background.image']==='string'){RG.DrawBackgroundImage(this);}\nRG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.hasTooltips=false;var overHotspot=false;this.coords=[];if(typeof(prop['chart.xmin'])=='string')prop['chart.xmin']=RG.parseDate(prop['chart.xmin']);if(typeof(prop['chart.xmax'])=='string')prop['chart.xmax']=RG.parseDate(prop['chart.xmax']);if(!RGraph.ISOLD){this.Set('chart.tooltips',[]);for(var i=0,len=this.data.length;i<len;i+=1){for(var j=0,len2=this.data[i].length;j<len2;j+=1){if(this.data[i][j]&&this.data[i][j][3]){prop['chart.tooltips'].push(this.data[i][j][3]);this.hasTooltips=true;}else{prop['chart.tooltips'].push(null);}}}}\nthis.max=0;if(typeof prop['chart.ymax']==='number'){this.max=prop['chart.ymax'];this.min=prop['chart.ymin']?prop['chart.ymin']:0;this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;var decimals=prop['chart.scale.decimals'];}else{var i=0;var j=0;for(i=0,len=this.data.length;i<len;i+=1){for(j=0,len2=this.data[i].length;j<len2;j+=1){if(!RG.isNull(this.data[i][j])&&this.data[i][j][1]!=null){this.max=Math.max(this.max,typeof(this.data[i][j][1])=='object'?RG.array_max(this.data[i][j][1]):Math.abs(this.data[i][j][1]));}}}\nthis.min=prop['chart.ymin']?prop['chart.ymin']:0;this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.ylabels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.max=this.scale2.max;this.min=this.scale2.min;}\nthis.grapharea=ca.height-this.gutterTop-this.gutterBottom;RG.background.Draw(this);if(prop['chart.background.hbars']&&prop['chart.background.hbars'].length){RG.DrawBars(this);}\nif(prop['chart.background.vbars']&&prop['chart.background.vbars'].length){this.DrawVBars();}\nif(!prop['chart.noaxes']){this.DrawAxes();}\nthis.DrawLabels();if(prop['chart.animation.trace']){co.save();co.beginPath();co.rect(0,0,ca.width*prop['chart.animation.trace.clip'],ca.height);co.clip();}\nfor(i=0;i<this.data.length;++i){this.DrawMarks(i);co.shadowColor=prop['chart.line.shadow.color'];co.shadowOffsetX=prop['chart.line.shadow.offsetx'];co.shadowOffsetY=prop['chart.line.shadow.offsety'];co.shadowBlur=prop['chart.line.shadow.blur'];this.DrawLine(i);RG.NoShadow(this);}\nif(prop['chart.line']){for(var i=0,len=this.data.length;i<len;i+=1){this.DrawMarks(i);}}\nif(prop['chart.animation.trace']){co.restore();}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.line.colors']);}\nif(prop['chart.labels.above']){this.DrawAboveLabels();}\nthis.DrawInGraphLabels(this);if(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;}\nthis.drawAxes=this.DrawAxes=function()\n{var graphHeight=ca.height-this.gutterTop-this.gutterBottom;co.beginPath();co.strokeStyle=prop['chart.axis.color'];co.lineWidth=(prop['chart.axis.linewidth']||1)+0.001;if(prop['chart.noyaxis']==false){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,this.gutterTop);co.lineTo(this.gutterLeft,ca.height-this.gutterBottom);}else{co.moveTo(ca.width-this.gutterRight,this.gutterTop);co.lineTo(ca.width-this.gutterRight,ca.height-this.gutterBottom);}}\nif(prop['chart.xaxis']){if(prop['chart.xaxispos']=='center'){co.moveTo(this.gutterLeft,ma.round(this.gutterTop+((ca.height-this.gutterTop-this.gutterBottom)/2)));co.lineTo(ca.width-this.gutterRight,ma.round(this.gutterTop+((ca.height-this.gutterTop-this.gutterBottom)/2)));}else{var y=this.getYCoord(this.scale2.min>0?this.scale2.min:0);co.moveTo(this.gutterLeft,y);co.lineTo(ca.width-this.gutterRight,y);}}\nif(prop['chart.noyaxis']===false){var numyticks=prop['chart.numyticks'];for(i=0;i<numyticks;++i){var y=((ca.height-this.gutterTop-this.gutterBottom)/numyticks)*i;y=y+this.gutterTop;if(prop['chart.xaxispos']=='center'&&i==(numyticks/2)){continue;}\nif(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft-3,ma.round(y));}else{co.moveTo(ca.width-this.gutterRight+3,Math.round(y));co.lineTo(ca.width-this.gutterRight,Math.round(y));}}\nif(prop['chart.numyticks']>0){if(prop['chart.xaxispos']=='center'&&prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,ma.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft-3,ma.round(ca.height-this.gutterBottom));}else if(prop['chart.xaxispos']=='center'){co.moveTo(ca.width-this.gutterRight+3,ma.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight,ma.round(ca.height-this.gutterBottom));}}\nif(prop['chart.xaxis']===false&&prop['chart.yaxispos']==='left'){co.moveTo(this.gutterLeft,ma.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft-3,ma.round(ca.height-this.gutterBottom));}else if(prop['chart.xaxis']===false&&prop['chart.yaxispos']==='right'){co.moveTo(ca.width-this.gutterRight,ma.round(ca.height-this.gutterBottom));co.lineTo(ca.width-this.gutterRight+3,ma.round(ca.height-this.gutterBottom));}\nif(prop['chart.xaxispos']==='bottom'&&prop['chart.numyticks']>0){if(prop['chart.yaxispos']=='left'){co.moveTo(this.gutterLeft,ma.round(this.getYCoord(prop['chart.ymin'])));co.lineTo(this.gutterLeft-3,ma.round(this.getYCoord(prop['chart.ymin'])));}else{co.moveTo(ca.width-this.gutterRight+3,ma.round(this.getYCoord(prop['chart.ymin'])));co.lineTo(ca.width-this.gutterRight,ma.round(this.getYCoord(prop['chart.ymin'])));}}}\nif(prop['chart.numxticks']>0&&prop['chart.xaxis']){var x=0,y=this.getYCoord(prop['chart.ylabels.invert']?this.scale2.max:(this.scale2.max>0&&this.scale2.min>0?this.scale2.min:0))-3,size=3;if(prop['chart.ymin']===0&&prop['chart.xaxispos']==='bottom'){y+=3;}\nif(this.scale2.max>0&&this.scale2.min>0){y+=3;}\nthis.xTickGap=(prop['chart.labels']&&prop['chart.labels'].length)?((ca.width-this.gutterLeft-this.gutterRight)/prop['chart.labels'].length):(ca.width-this.gutterLeft-this.gutterRight)/10;if(typeof(prop['chart.numxticks'])=='number'){this.xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];}\nfor(x=(this.gutterLeft+(prop['chart.yaxispos']=='left'&&prop['chart.noyaxis']==false?this.xTickGap:0));x<=(ca.width-this.gutterRight-(prop['chart.yaxispos']=='left'||prop['chart.noyaxis']==true?-1:1));x+=this.xTickGap){if(prop['chart.yaxispos']=='left'&&prop['chart.noendxtick']==true&&x==(ca.width-this.gutterRight)){continue;}else if(prop['chart.yaxispos']=='right'&&prop['chart.noendxtick']==true&&x==this.gutterLeft){continue;}\nco.moveTo(ma.round(x),y);co.lineTo(ma.round(x),y+(prop['chart.xaxispos']==='center'||prop['chart.ymin']<0?size*2:size));}}\nco.stroke();co.lineWidth=1;};this.drawLabels=this.DrawLabels=function()\n{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],xMin=prop['chart.xmin'],xMax=prop['chart.xmax'],yMax=this.scale2.max,yMin=prop['chart.ymin']?prop['chart.ymin']:0,text_size=prop['chart.text.size'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],numYLabels=prop['chart.ylabels.count'],invert=prop['chart.ylabels.invert'],inside=prop['chart.ylabels.inside'],context=co,canvas=ca,boxed=false,offsetx=prop['chart.ylabels.offsetx'],offsety=prop['chart.ylabels.offsety']\nthis.halfTextHeight=text_size/2;this.halfGraphHeight=(ca.height-this.gutterTop-this.gutterBottom)/2;if(prop['chart.ylabels']){var xPos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='right'?'left':'right';if(inside){if(prop['chart.yaxispos']=='left'){xPos=prop['chart.gutter.left']+5;align='left';boxed=true;}else{xPos=ca.width-prop['chart.gutter.right']-5;align='right';boxed=true;}}\nif(prop['chart.xaxispos']=='center'){if(typeof(prop['chart.ylabels.specific'])=='object'&&prop['chart.ylabels.specific']!=null&&prop['chart.ylabels.specific'].length){var labels=prop['chart.ylabels.specific'];if(prop['chart.ymin']>0){labels=[];for(var i=0;i<(prop['chart.ylabels.specific'].length-1);++i){labels.push(prop['chart.ylabels.specific'][i]);}}\nfor(var i=0;i<labels.length;++i){var y=this.gutterTop+(i*(this.grapharea/(labels.length*2)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':labels[i],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}\nvar reversed_labels=RG.array_reverse(labels);for(var i=0;i<reversed_labels.length;++i){var y=this.gutterTop+(this.grapharea/2)+((i+1)*(this.grapharea/(labels.length*2)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':reversed_labels[i],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}\nif(prop['chart.ymin']!=0){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':(this.grapharea/2)+this.gutterTop+offsety,'text':prop['chart.ylabels.specific'][prop['chart.ylabels.specific'].length-1],'valign':'center','halign':align,'bounding':boxed,'tag':'labels.specific'});}}\nif(!prop['chart.ylabels.specific']&&typeof numYLabels=='number'){for(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}else{RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[this.scale2.labels.length-(i+1)],'tag':'scale'});}}\nfor(var i=0,len=this.scale2.labels.length;i<len;i+=1){if(!invert){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight+this.halfGraphHeight-((i/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+this.scale2.labels[len-(i+1)],'tag':'scale'});}else{if(i==(len-1)&&invert){continue;}\nRG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.halfGraphHeight+this.halfGraphHeight-(((i+1)/numYLabels)*this.halfGraphHeight)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+this.scale2.labels[i],'tag':'scale'});}}\nif(!invert&&(yMin>0||prop['chart.scale.zerostart'])){RG.text2(this,{font:font,size:text_size,x:xPos+offsetx,y:this.gutterTop+this.halfGraphHeight+offsety,valign:'center',halign:align,bounding:boxed,boundingFill:'white',text:RG.numberFormat(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),tag:'scale'});}\nif(invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.number_format(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+(this.halfGraphHeight*2)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':'-'+RG.numberFormat(this,yMin.toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}}else{var xPos=prop['chart.yaxispos']=='left'?this.gutterLeft-5:ca.width-this.gutterRight+5;var align=prop['chart.yaxispos']=='right'?'left':'right';if(inside){if(prop['chart.yaxispos']=='left'){xPos=prop['chart.gutter.left']+5;align='left';boxed=true;}else{xPos=ca.width-this.gutterRight-5;align='right';boxed=true;}}\nif(typeof prop['chart.ylabels.specific']=='object'&&prop['chart.ylabels.specific']){var labels=prop['chart.ylabels.specific'];if(prop['chart.ymin']>9999){labels=[];for(var i=0;i<(prop['chart.ylabels.specific'].length-1);++i){labels.push(prop['chart.ylabels.specific'][i]);}}\nfor(var i=0,len=labels.length;i<len;i+=1){var y=this.gutterTop+(i*(this.grapharea/(len-1)));RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':y+offsety,'text':labels[i],'halign':align,'valign':'center','bounding':boxed,'tag':'scale'});}}else{if(typeof(numYLabels)=='number'){if(invert){for(var i=0;i<numYLabels;++i){var interval=(ca.height-this.gutterTop-this.gutterBottom)/numYLabels;RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+((i+1)*interval)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}\nif(!prop['chart.xaxis']&&!prop['chart.ymin']){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,(this.min).toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}else{for(var i=0,len=this.scale2.labels.length;i<len;i+=1){RG.Text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+this.grapharea-(((i+1)/this.scale2.labels.length)*this.grapharea)+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':this.scale2.labels[i],'tag':'scale'});}\nif(!prop['chart.xaxis']&&prop['chart.ymin']==0){RG.text2(this,{font:font,size:text_size,x:xPos+offsetx,y:ca.height-this.gutterBottom+offsety,valign:'center',halign:align,boundin:boxed,boundingFill:'white',text:RG.numberFormat(this,(0).toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),tag:'scale'});}}}\nif((prop['chart.ymin']||prop['chart.scale.zerostart'])&&!invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':ca.height-this.gutterBottom+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,prop['chart.ymin'].toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}else if(invert){RG.text2(this,{'font':font,'size':text_size,'x':xPos+offsetx,'y':this.gutterTop+offsety,'valign':'center','halign':align,'bounding':boxed,'boundingFill':'white','text':RG.numberFormat(this,prop['chart.ymin'].toFixed(this.scale2.min===0?0:prop['chart.scale.decimals']),units_pre,units_post),'tag':'scale'});}}}}\nif(prop['chart.xscale']){var numXLabels=prop['chart.xscale.numlabels'],y=ca.height-this.gutterBottom+5+(text_size/2),units_pre_x=prop['chart.xscale.units.pre'],units_post_x=prop['chart.xscale.units.post'],decimals=prop['chart.xscale.decimals'],point=prop['chart.xscale.point'],thousand=prop['chart.xscale.thousand'],color=prop['chart.labels.color'],bold=prop['chart.labels.bold'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety'],angle=prop['chart.text.angle'];if(angle>0){angle*=-1;valign='center';halign='right';y+=5;}else{valign='center';halign='center';}\nif(!prop['chart.xmax']){var xmax=0;var xmin=prop['chart.xmin'];for(var ds=0,len=this.data.length;ds<len;ds+=1){for(var point=0,len2=this.data[ds].length;point<len2;point+=1){xmax=Math.max(xmax,this.data[ds][point][0]);}}}else{xmax=prop['chart.xmax'];xmin=prop['chart.xmin']}\nthis.xscale2=RG.getScale2(this,{'max':xmax,'min':xmin,'scale.decimals':decimals,'scale.point':point,'scale.thousand':thousand,'units.pre':units_pre_x,'units.post':units_post_x,'ylabels.count':numXLabels,'strict':true});this.Set('chart.xmax',this.xscale2.max);var interval=(ca.width-this.gutterLeft-this.gutterRight)/this.xscale2.labels.length;for(var i=0,len=this.xscale2.labels.length;i<len;i+=1){var num=((prop['chart.xmax']-prop['chart.xmin'])*((i+1)/numXLabels))+(xmin||0),x=this.gutterLeft+((i+1)*interval),text=typeof prop['chart.xscale.formatter']==='function'?String(prop['chart.xscale.formatter'](this,num)):this.xscale2.labels[i];RG.text2(this,{color:color,font:font,size:text_size,bold:bold,x:x+offsetx,y:y+offsety,valign:valign,halign:halign,text:text,angle:angle,tag:'xscale'});}\nvar text=typeof prop['chart.xscale.formatter']==='function'?String(prop['chart.xscale.formatter'](this,prop['chart.xmin'])):String(prop['chart.xmin']);RG.text2(this,{color:color,font:font,size:text_size,bold:bold,x:this.gutterLeft+offsetx,y:y+offsety,valign:'center',halign:'center',text:text,tag:'xscale',angle:angle});}else{var graphArea=ca.width-this.gutterLeft-this.gutterRight;var xInterval=graphArea/prop['chart.labels'].length;var xPos=this.gutterLeft;var yPos=(ca.height-this.gutterBottom)+3;var labels=prop['chart.labels'];var color=prop['chart.labels.color'];var bold=prop['chart.labels.bold'];var offsetx=prop['chart.labels.offsetx'];var offsety=prop['chart.labels.offsety'];var angle=0;var valign='top';var halign='center';if(prop['chart.text.angle']>0){angle=-1*prop['chart.text.angle'];valign='center';halign='right';yPos+=10;}\nfor(i=0;i<labels.length;++i){if(typeof(labels[i])=='object'){if(prop['chart.labels.specific.align']=='center'){var rightEdge=0;if(labels[i+1]&&labels[i+1][1]){rightEdge=labels[i+1][1];}else{rightEdge=prop['chart.xmax'];}\nvar offset=(this.getXCoord(rightEdge)-this.getXCoord(labels[i][1]))/2;}else{var offset=5;}\nRG.text2(this,{'color':color,'font':font,'size':prop['chart.text.size'],'bold':bold,'x':this.getXCoord(labels[i][1])+offset+offsetx,'y':yPos+offsety,'valign':valign,'halign':angle!=0?'right':(prop['chart.labels.specific.align']=='center'?'center':'left'),'text':String(labels[i][0]),'angle':angle,'marker':false,'tag':'labels.specific'});co.beginPath();co.strokeStyle='#bbb';co.moveTo(ma.round(this.gutterLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xmax']-xMin)))),ca.height-this.gutterBottom);co.lineTo(ma.round(this.gutterLeft+(graphArea*((labels[i][1]-xMin)/(prop['chart.xmax']-xMin)))),ca.height-this.gutterBottom+20);co.stroke();}else{RG.text2(this,{'color':color,'font':font,'size':prop['chart.text.size'],'bold':bold,'x':xPos+(xInterval/2)+offsetx,'y':yPos+offsety,'valign':valign,'halign':halign,'text':String(labels[i]),'angle':angle,'tag':'labels'});}\nxPos+=xInterval;}\nif(typeof(labels[0])=='object'){co.beginPath();co.strokeStyle='#bbb';co.moveTo(this.gutterLeft+graphArea,ca.height-this.gutterBottom);co.lineTo(this.gutterLeft+graphArea,ca.height-this.gutterBottom+20);co.stroke();}}};this.drawMarks=this.DrawMarks=function(i)\n{this.coords[i]=[];var xmax=prop['chart.xmax'];var default_color=prop['chart.defaultcolor'];for(var j=0,len=this.data[i].length;j<len;j+=1){var data_points=this.data[i];if(RG.isNull(data_points[j])){continue;}\nvar xCoord=data_points[j][0];var yCoord=data_points[j][1];var color=data_points[j][2]?data_points[j][2]:default_color;var tooltip=(data_points[j]&&data_points[j][3])?data_points[j][3]:null;this.DrawMark(i,xCoord,yCoord,xmax,this.scale2.max,color,tooltip,this.coords[i],data_points,j);}};this.drawMark=this.DrawMark=function(data_set_index,x,y,xMax,yMax,color,tooltip,coords,data,data_index)\n{var tickmarks=prop['chart.tickmarks'],tickSize=prop['chart.ticksize'],xMin=prop['chart.xmin'],x=((x-xMin)/(xMax-xMin))*(ca.width-this.gutterLeft-this.gutterRight),originalX=x,originalY=y;if(tickmarks&&typeof(tickmarks)=='object'){tickmarks=tickmarks[data_set_index];}\nif(typeof(tickSize)=='object'){var tickSize=tickSize[data_set_index];var halfTickSize=tickSize/2;}else{var halfTickSize=tickSize/2;}\nif(y&&typeof y==='object'&&typeof y[0]==='number'&&typeof y[1]==='number'&&typeof y[2]==='number'&&typeof y[3]==='number'&&typeof y[4]==='number'){this.Set('chart.boxplot',true);var y0=this.getYCoord(y[0]),y1=this.getYCoord(y[1]),y2=this.getYCoord(y[2]),y3=this.getYCoord(y[3]),y4=this.getYCoord(y[4]),col1=y[5],col2=y[6],boxWidth=typeof y[7]=='number'?y[7]:prop['chart.boxplot.width'];}else{var yCoord=this.getYCoord(y);}\nx+=this.gutterLeft;co.beginPath();co.strokeStyle=color;if(prop['chart.boxplot']){boxWidth=(boxWidth/prop['chart.xmax'])*(ca.width-this.gutterLeft-this.gutterRight);var halfBoxWidth=boxWidth/2;if(prop['chart.line.visible']){co.beginPath();if(typeof y[8]==='string'){co.strokeStyle=y[8];}\nco.strokeRect(x-halfBoxWidth,y1,boxWidth,y3-y1);if(col1){co.fillStyle=col1;co.fillRect(x-halfBoxWidth,y1,boxWidth,y2-y1);}\nif(col2){co.fillStyle=col2;co.fillRect(x-halfBoxWidth,y2,boxWidth,y3-y2);}\nco.stroke();co.beginPath();if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,ma.round(y0));co.lineTo(x+halfBoxWidth,ma.round(y0));}\nco.moveTo(ma.round(x),y0);co.lineTo(ma.round(x),y1);if(prop['chart.boxplot.capped']){co.moveTo(x-halfBoxWidth,ma.round(y4));co.lineTo(x+halfBoxWidth,ma.round(y4));}\nco.moveTo(ma.round(x),y4);co.lineTo(ma.round(x),y3);co.stroke();}}\nif(prop['chart.line.visible']&&typeof(y)=='number'&&!y0&&!y1&&!y2&&!y3&&!y4){if(tickmarks=='circle'){co.arc(x,yCoord,halfTickSize,0,6.28,0);co.fillStyle=color;co.fill();}else if(tickmarks=='plus'){co.moveTo(x,yCoord-halfTickSize);co.lineTo(x,yCoord+halfTickSize);co.moveTo(x-halfTickSize,yCoord);co.lineTo(x+halfTickSize,yCoord);co.stroke();}else if(tickmarks=='square'){co.strokeStyle=color;co.fillStyle=color;co.fillRect(x-halfTickSize,yCoord-halfTickSize,tickSize,tickSize);}else if(tickmarks=='cross'){co.moveTo(x-halfTickSize,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord+halfTickSize);co.moveTo(x+halfTickSize,yCoord-halfTickSize);co.lineTo(x-halfTickSize,yCoord+halfTickSize);co.stroke();}else if(tickmarks=='diamond'){co.fillStyle=co.strokeStyle;co.moveTo(x,yCoord-halfTickSize);co.lineTo(x+halfTickSize,yCoord);co.lineTo(x,yCoord+halfTickSize);co.lineTo(x-halfTickSize,yCoord);co.lineTo(x,yCoord-halfTickSize);co.fill();co.stroke();}else if(typeof(tickmarks)=='function'){var graphWidth=ca.width-this.gutterLeft-this.gutterRight,graphheight=ca.height-this.gutterTop-this.gutterBottom,xVal=((x-this.gutterLeft)/graphWidth)*xMax,yVal=((graphheight-(yCoord-this.gutterTop))/graphheight)*yMax;tickmarks(this,data,x,yCoord,xVal,yVal,xMax,yMax,color,data_set_index,data_index)}else if(typeof tickmarks==='string'&&(tickmarks.substr(0,6)==='image:'||tickmarks.substr(0,5)==='data:'||tickmarks.substr(0,1)==='/'||tickmarks.substr(0,3)==='../'||tickmarks.substr(0,7)==='images/')){var img=new Image();if(tickmarks.substr(0,6)==='image:'){img.src=tickmarks.substr(6);}else{img.src=tickmarks;}\nimg.onload=function()\n{if(prop['chart.tickmarks.image.halign']==='center')x-=(this.width/2);if(prop['chart.tickmarks.image.halign']==='right')x-=this.width;if(prop['chart.tickmarks.image.valign']==='center')yCoord-=(this.height/2);if(prop['chart.tickmarks.image.valign']==='bottom')yCoord-=this.height;x+=prop['chart.tickmarks.image.offsetx'];yCoord+=prop['chart.tickmarks.image.offsety'];co.drawImage(this,x,yCoord);}}else if(tickmarks===null){}else{alert('[SCATTER] ('+this.id+') Unknown tickmark style: '+tickmarks);}}\nif(prop['chart.boxplot']&&typeof y0==='number'&&typeof y1==='number'&&typeof y2==='number'&&typeof y3==='number'&&typeof y4==='number'){x=[x-halfBoxWidth,x+halfBoxWidth];yCoord=[y0,y1,y2,y3,y4];}\ncoords.push([x,yCoord,tooltip]);};this.drawLine=this.DrawLine=function(i)\n{if(typeof(prop['chart.line.visible'])=='boolean'&&prop['chart.line.visible']==false){return;}\nif(prop['chart.line']&&this.coords[i].length>=2){if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash(prop['chart.line.dash']);}\nco.lineCap='round';co.lineJoin='round';co.lineWidth=this.getLineWidth(i);co.strokeStyle=prop['chart.line.colors'][i];co.beginPath();var prevY=null;var currY=null;for(var j=0,len=this.coords[i].length;j<len;j+=1){var xPos=this.coords[i][j][0];var yPos=this.coords[i][j][1];if(j>0)prevY=this.coords[i][j-1][1];currY=yPos;if(j==0||RG.is_null(prevY)||RG.is_null(currY)){co.moveTo(xPos,yPos);}else{var stepped=prop['chart.line.stepped'];if((typeof stepped=='boolean'&&stepped)||(typeof stepped=='object'&&stepped[i])){co.lineTo(this.coords[i][j][0],this.coords[i][j-1][1]);}\nco.lineTo(xPos,yPos);}}\nco.stroke();if(prop['chart.line.dash']&&typeof co.setLineDash==='function'){co.setLineDash([1,0]);}}\nco.lineWidth=1;};this.getLineWidth=this.GetLineWidth=function(i)\n{var linewidth=prop['chart.line.linewidth'];if(typeof linewidth=='number'){return linewidth;}else if(typeof linewidth=='object'){if(linewidth[i]){return linewidth[i];}else{return linewidth[0];}\nalert('[SCATTER] Error! chart.linewidth should be a single number or an array of one or more numbers');}};this.drawVBars=this.DrawVBars=function()\n{var vbars=prop['chart.background.vbars'];var graphWidth=ca.width-this.gutterLeft-this.gutterRight;if(vbars){var xmax=prop['chart.xmax'];var xmin=prop['chart.xmin'];for(var i=0,len=vbars.length;i<len;i+=1){var key=i;var value=vbars[key];if(typeof value[0]=='string')value[0]=RG.parseDate(value[0]);if(typeof value[1]=='string')value[1]=RG.parseDate(value[1])-value[0];var x=(((value[0]-xmin)/(xmax-xmin))*graphWidth)+this.gutterLeft;var width=(value[1]/(xmax-xmin))*graphWidth;co.fillStyle=value[2];co.fillRect(x,this.gutterTop,width,(ca.height-this.gutterTop-this.gutterBottom));}}};this.drawInGraphLabels=this.DrawInGraphLabels=function(obj)\n{var labels=obj.Get('chart.labels.ingraph');var labels_processed=[];if(!labels){return;}\nvar fgcolor='black';var bgcolor='white';var direction=1;for(var i=0,len=labels.length;i<len;i+=1){if(typeof(labels[i])=='number'){for(var j=0;j<labels[i];++j){labels_processed.push(null);}}else if(typeof(labels[i])=='string'||typeof(labels[i])=='object'){labels_processed.push(labels[i]);}else{labels_processed.push('');}}\nRG.NoShadow(obj);if(labels_processed&&labels_processed.length>0){var i=0;for(var set=0;set<obj.coords.length;++set){for(var point=0;point<obj.coords[set].length;++point){if(labels_processed[i]){var x=obj.coords[set][point][0];var y=obj.coords[set][point][1];var length=typeof(labels_processed[i][4])=='number'?labels_processed[i][4]:25;var text_x=x;var text_y=y-5-length;co.moveTo(x,y-5);co.lineTo(x,y-5-length);co.stroke();co.beginPath();co.moveTo(x,y-5);co.lineTo(x-3,y-10);co.lineTo(x+3,y-10);co.closePath();co.beginPath();co.fillStyle=(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][1])=='string')?labels_processed[i][1]:'black';RG.text2(this,{'font':obj.Get('chart.text.font'),'size':obj.Get('chart.text.size'),'x':text_x,'y':text_y,'text':(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][0])=='string')?labels_processed[i][0]:labels_processed[i],'valign':'bottom','halign':'center','bounding':true,'bounding.fill':(typeof(labels_processed[i])=='object'&&typeof(labels_processed[i][2])=='string')?labels_processed[i][2]:'white','tag':'labels.ingraph'});co.fill();}\ni++;}}}};this.getShape=this.getPoint=function(e)\n{var mouseXY=RG.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];var overHotspot=false;var offset=prop['chart.tooltips.hotspot'];for(var set=0,len=this.coords.length;set<len;++set){for(var i=0,len2=this.coords[set].length;i<len2;++i){var x=this.coords[set][i][0];var y=this.coords[set][i][1];var tooltip=this.data[set][i][3];if(typeof(y)=='number'){if(mouseX<=(x+offset)&&mouseX>=(x-offset)&&mouseY<=(y+offset)&&mouseY>=(y-offset)){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);var index_adjusted=i;for(var ds=(set-1);ds>=0;--ds){index_adjusted+=this.data[ds].length;}\nreturn{0:this,1:x,2:y,3:set,4:i,5:this.data[set][i][3],'object':this,'x':x,'y':y,'dataset':set,'index':i,'tooltip':tooltip,'index_adjusted':index_adjusted};}}else if(RG.is_null(y)){}else{var mark=this.data[set][i];var width=prop['chart.boxplot.width'];if(typeof(mark[1][7])=='number'){width=mark[1][7];}\nif(typeof(x)=='object'&&mouseX>x[0]&&mouseX<x[1]&&mouseY<y[1]&&mouseY>y[3]){var tooltip=RG.parseTooltipText(this.data[set][i][3],0);return{0:this,1:x[0],2:x[1]-x[0],3:y[1],4:y[3]-y[1],5:set,6:i,7:this.data[set][i][3],'object':this,'x':x[0],'y':y[1],'width':x[1]-x[0],'height':y[3]-y[1],'dataset':set,'index':i,'tooltip':tooltip};}}}}};this.drawAboveLabels=this.DrawAboveLabels=function()\n{var size=prop['chart.labels.above.size'];var font=prop['chart.text.font'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];for(var set=0,len=this.coords.length;set<len;++set){for(var point=0,len2=this.coords[set].length;point<len2;++point){var x_val=this.data[set][point][0];var y_val=this.data[set][point][1];if(!RG.is_null(y_val)){if(RG.is_array(y_val)){var max=0;for(var i=0;i<y_val;++i){max=Math.max(max,y_val[i]);}\ny_val=max;}\nvar x_pos=this.coords[set][point][0];var y_pos=this.coords[set][point][1];RG.Text2(this,{'font':font,'size':size,'x':x_pos,'y':y_pos-5-size,'text':x_val.toFixed(prop['chart.labels.above.decimals'])+', '+y_val.toFixed(prop['chart.labels.above.decimals']),'valign':'center','halign':'center','bounding':true,'boundingFill':'rgba(255, 255, 255, 0.7)','tag':'labels.above'});}}}};this.getYValue=this.getValue=function(arg)\n{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseCoords=RG.getMouseXY(arg);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];}\nvar obj=this;if(mouseY<this.gutterTop||mouseY>(ca.height-this.gutterBottom)||mouseX<this.gutterLeft||mouseX>(ca.width-this.gutterRight)){return null;}\nif(prop['chart.xaxispos']=='center'){var value=(((this.grapharea/2)-(mouseY-this.gutterTop))/this.grapharea)*(this.max-this.min)\nvalue*=2;if(value>=0){value+=this.min\nif(prop['chart.ylabels.invert']){value-=this.min;value=this.max-value;}}else{value-=this.min;if(prop['chart.ylabels.invert']){value+=this.min;value=this.max+value;value*=-1;}}}else{var value=((this.grapharea-(mouseY-this.gutterTop))/this.grapharea)*(this.max-this.min)\nvalue+=this.min;if(prop['chart.ylabels.invert']){value-=this.min;value=this.max-value;}}\nreturn value;};this.getXValue=function(arg)\n{if(arg.length==2){var mouseX=arg[0];var mouseY=arg[1];}else{var mouseXY=RG.getMouseXY(arg);var mouseX=mouseXY[0];var mouseY=mouseXY[1];}\nvar obj=this;if(mouseY<this.gutterTop||mouseY>(ca.height-this.gutterBottom)||mouseX<this.gutterLeft||mouseX>(ca.width-this.gutterRight)){return null;}\nvar width=(ca.width-this.gutterLeft-this.gutterRight);var value=((mouseX-this.gutterLeft)/width)*(prop['chart.xmax']-prop['chart.xmin'])\nvalue+=prop['chart.xmin'];return value;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{if(shape['height']){RG.Highlight.Rect(this,shape);}else{RG.Highlight.Point(this,shape);}}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>(this.gutterLeft-3)&&mouseXY[0]<(ca.width-this.gutterRight+3)&&mouseXY[1]>(this.gutterTop-3)&&mouseXY[1]<((ca.height-this.gutterBottom)+3)){return this;}};this.getXCoord=function(value)\n{if(typeof value!='number'&&typeof value!='string'){return null;}\nif(typeof value==='string'){value=RG.parseDate(value);}\nvar xmin=prop['chart.xmin'];var xmax=prop['chart.xmax'];var x;if(value<xmin)return null;if(value>xmax)return null;var gutterRight=this.gutterRight;var gutterLeft=this.gutterLeft;if(prop['chart.yaxispos']=='right'){x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=(ca.width-gutterRight-x);}else{x=((value-xmin)/(xmax-xmin))*(ca.width-gutterLeft-gutterRight);x=x+gutterLeft;}\nreturn x;};this.getYCoord=this.getYCoordFromValue=function(value)\n{if(typeof(value)!='number'){return null;}\nvar invert=prop['chart.ylabels.invert'];var xaxispos=prop['chart.xaxispos'];var graphHeight=ca.height-this.gutterTop-this.gutterBottom;var halfGraphHeight=graphHeight/2;var ymax=this.max;var ymin=prop['chart.ymin'];var coord=0;if(value>ymax||(prop['chart.xaxispos']=='bottom'&&value<ymin)||(prop['chart.xaxispos']=='center'&&((value>0&&value<ymin)||(value<0&&value>(-1*ymin))))){return null;}\nif(xaxispos=='center'){coord=((Math.abs(value)-ymin)/(ymax-ymin))*halfGraphHeight;if(invert){coord=halfGraphHeight-coord;}\nif(value<0){coord+=this.gutterTop;coord+=halfGraphHeight;}else{coord=halfGraphHeight-coord;coord+=this.gutterTop;}}else{coord=((value-ymin)/(ymax-ymin))*graphHeight;if(invert){coord=graphHeight-coord;}\ncoord=graphHeight-coord;coord=this.gutterTop+coord;}\nreturn coord;};RG.Scatter.Bubble=function(scatter,min,max,width,data)\n{this.scatter=scatter;this.min=min;this.max=max;this.width=width;this.data=data;this.coords=[];this.type='scatter.bubble'\nthis.set=this.Set=function(name,value)\n{this.scatter.set(name,value);return this;};this.get=this.Get=function(name)\n{this.scatter.get(name);};this.draw=this.Draw=function()\n{var bubble_min=this.min,bubble_max=this.max,bubble_data=this.data,bubble_max_width=this.width;var obj_bubble=this,obj_scatter=this.scatter;this.scatter.ondraw=function(obj)\n{for(var i=0;i<obj.coords[0].length;++i){bubble_data[i]=ma.max(bubble_data[i],bubble_min);bubble_data[i]=ma.min(bubble_data[i],bubble_max);var r=((bubble_data[i]-bubble_min)/(bubble_max-bubble_min))*bubble_max_width,color=obj_scatter.data[0][i][2]?obj_scatter.data[0][i][2]:obj_scatter.properties['chart.defaultcolor'];co.beginPath();co.fillStyle=RG.radialGradient(obj,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),0,obj_scatter.coords[0][i][0]+(r/2.5),obj_scatter.coords[0][i][1]-(r/2.5),r,prop['chart.colors.bubble.graduated']?'white':color,color);co.arc(obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,0,RG.TWOPI,false);co.fill();obj_bubble.coords[i]=[obj_scatter.coords[0][i][0],obj_scatter.coords[0][i][1],r,co.fillStyle];}}\nthis.scatter.Draw();return this;};};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['data']=RG.array_clone(this.data);this.original_colors['chart.background.vbars']=RG.array_clone(prop['chart.background.vbars']);this.original_colors['chart.background.hbars']=RG.array_clone(prop['chart.background.hbars']);this.original_colors['chart.line.colors']=RG.array_clone(prop['chart.line.colors']);this.original_colors['chart.defaultcolor']=RG.array_clone(prop['chart.defaultcolor']);this.original_colors['chart.crosshairs.color']=RG.array_clone(prop['chart.crosshairs.color']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.background.barcolor1']=RG.array_clone(prop['chart.background.barcolor1']);this.original_colors['chart.background.barcolor2']=RG.array_clone(prop['chart.background.barcolor2']);this.original_colors['chart.background.grid.color']=RG.array_clone(prop['chart.background.grid.color']);this.original_colors['chart.background.color']=RG.array_clone(prop['chart.background.color']);this.original_colors['chart.axis.color']=RG.array_clone(prop['chart.axis.color']);}\nvar data=this.data;if(data){for(var dataset=0;dataset<data.length;++dataset){for(var i=0;i<this.data[dataset].length;++i){if(this.data[dataset][i]&&typeof(this.data[dataset][i][1])=='object'&&this.data[dataset][i][1]){if(typeof(this.data[dataset][i][1][5])=='string')this.data[dataset][i][1][5]=this.parseSingleColorForGradient(this.data[dataset][i][1][5]);if(typeof(this.data[dataset][i][1][6])=='string')this.data[dataset][i][1][6]=this.parseSingleColorForGradient(this.data[dataset][i][1][6]);}\nif(!RG.isNull(this.data[dataset][i])){this.data[dataset][i][2]=this.parseSingleColorForGradient(this.data[dataset][i][2]);}}}}\nvar hbars=prop['chart.background.hbars'];if(hbars){for(i=0;i<hbars.length;++i){hbars[i][2]=this.parseSingleColorForGradient(hbars[i][2]);}}\nvar vbars=prop['chart.background.vbars'];if(vbars){for(i=0;i<vbars.length;++i){vbars[i][2]=this.parseSingleColorForGradient(vbars[i][2]);}}\nvar colors=prop['chart.line.colors'];if(colors){for(i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}\nprop['chart.defaultcolor']=this.parseSingleColorForGradient(prop['chart.defaultcolor']);prop['chart.crosshairs.color']=this.parseSingleColorForGradient(prop['chart.crosshairs.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);prop['chart.axis.color']=this.parseSingleColorForGradient(prop['chart.axis.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof(color)!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nif(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.interactiveKeyHighlight=function(index)\n{if(this.coords&&this.coords[index]&&this.coords[index].length){this.coords[index].forEach(function(value,idx,arr)\n{co.beginPath();co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.arc(value[0],value[1],prop['chart.ticksize']+3,0,RG.TWOPI,false);co.fill();});}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.trace=this.trace2=function()\n{var obj=this,callback=arguments[2],opt=arguments[0]||{},frames=opt.frames||30,frame=0,callback=arguments[1]||function(){}\nobj.Set('animationTrace',true);obj.Set('animationTraceClip',0);function iterator()\n{RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame++<frames){obj.set('animationTraceClip',frame/frames);RG.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};this.resetColorsToOriginalValues=function()\n{for(var i=0,len=this.original_colors['data'].length;i<len;++i){for(var j=0,len2=this.original_colors['data'][i].length;j<len2;++j){this.data[i][j][2]=RG.array_clone(this.original_colors['data'][i][j][2]);if(typeof this.data[i][j][1]==='object'){this.data[i][j][1][5]=RG.array_clone(this.original_colors['data'][i][j][1][5]);this.data[i][j][1][6]=RG.array_clone(this.original_colors['data'][i][j][1][6]);}}}};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.semicircularprogress.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SemiCircularProgress=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.type='semicircularprogress';this.coords=[];this.isRGraph=true;this.currentValue=null;this.uid=RGraph.createUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.color':'rgba(0,0,0,0)','chart.colors':['#0c0'],'chart.linewidth':2,'chart.strokestyle':'#666','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':35,'chart.radius':null,'chart.centerx':null,'chart.centery':null,'chart.width':null,'chart.angles.start':Math.PI,'chart.angles.end':(2*Math.PI),'chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.formatter':null,'chart.scale.round':false,'chart.shadow':false,'chart.shadow.color':'rgba(220,220,220,1)','chart.shadow.blur':2,'chart.shadow.offsetx':2,'chart.shadow.offsety':2,'chart.labels.center':true,'chart.labels.center.font':null,'chart.labels.center.bold':false,'chart.labels.center.italic':false,'chart.labels.center.fade':false,'chart.labels.center.size':40,'chart.labels.center.color':'black','chart.labels.center.valign':'bottom','chart.labels.min.color':null,'chart.labels.min.font':null,'chart.labels.min.bold':false,'chart.labels.min.size':null,'chart.labels.min.italic':false,'chart.labels.min.offset.angle':0,'chart.labels.min.offsetx':0,'chart.labels.min.offsety':5,'chart.labels.max.color':null,'chart.labels.max.font':null,'chart.labels.max.bold':false,'chart.labels.max.size':null,'chart.labels.max.italic':false,'chart.labels.max.offset.angle':0,'chart.labels.max.offsetx':0,'chart.labels.max.offsety':5,'chart.title':'','chart.title.bold':true,'chart.title.italic':false,'chart.title.font':null,'chart.title.size':null,'chart.title.color':'black','chart.text.size':12,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.tooltips.coords.page':true,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.adjustable':false,'chart.events.click':null,'chart.events.mousemove':null,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[SEMICIRCULARPROGRESS] No canvas support');return;}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.radius=ma.min((ca.width-prop['chart.gutter.left']-prop['chart.gutter.right'])/2,ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom']);this.centerx=((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft;this.centery=ca.height-this.gutterBottom;this.width=this.radius/3;if(typeof prop['chart.radius']==='number')this.radius=prop['chart.radius'];if(typeof prop['chart.centerx']==='number')this.centerx=prop['chart.centerx'];if(typeof prop['chart.centery']==='number')this.centery=prop['chart.centery'];if(typeof prop['chart.width']==='number')this.width=prop['chart.width'];this.coords=[];this.coordsText=[];this.drawMeter();this.drawLabels();if(prop['chart.contextmenu']){RG.showContext(this);}\nRG.installEventListeners(this);if(prop['chart.resizable']){RG.allowResizing(this);}\nthis.allowAdjusting();if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.drawMeter=this.DrawMeter=function()\n{var start=prop['chart.angles.start'],end=prop['chart.angles.end'];this.scale2=RG.getScale2(this,{'max':this.max,'strict':true,'min':this.min,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':5,'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});if(prop['chart.background.color']!=='rgba(0,0,0,0)'){pa2(co,'fs % fr % % % %',prop['chart.background.color'],0,0,ca.width,ca.height);}\npa2(co,'lw % b a % % % % % false a % % % % % true c s % f % sx % sy % sc % sb % f % sx 0 sy 0 sb 0 sc rgba(0,0,0,0) lw 1',prop['chart.linewidth'],this.centerx,this.centery,this.radius,start,end,this.centerx,this.centery,this.radius-this.width,end,start,prop['chart.strokestyle'],typeof prop['chart.colors'][1]!=='undefined'?prop['chart.colors'][1]:prop['chart.colors'][0],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow']?prop['chart.shadow.color']:'rgba(0,0,0,0)',prop['chart.shadow.blur'],typeof prop['chart.colors'][1]!=='undefined'?'rgba(0,0,0,0)':'rgba(255,255,255,0.85)');var angle=start+((end-start)*((this.value-this.scale2.min)/(this.max-this.scale2.min)));pa2(co,'b a % % % % % false a % % % % % true c f %',this.centerx,this.centery,this.radius,start,angle,this.centerx,this.centery,this.radius-this.width,start+((end-start)*((this.value-this.scale2.min)/(this.max-this.scale2.min))),start,prop['chart.colors'][0]);this.coords=[[this.centerx,this.centery,this.radius,start,end,this.width,angle]];};this.drawLabels=this.DrawLabels=function()\n{var min=RG.numberFormat(this,this.scale2.min,prop['chart.units.pre'],prop['chart.units.post'])\nvar max=RG.numberFormat(this,this.scale2.max,prop['chart.units.pre'],prop['chart.units.post'])\nif(prop['chart.angles.start']===RGraph.PI){var halign='center';var valign='top';}else if(prop['chart.angles.start']<=RGraph.PI){var halign='left';var valign='center';}else if(prop['chart.angles.start']>=RGraph.PI){var halign='right';var valign='center';}\nvar xy=RG.getRadiusEndPoint(this.centerx,this.centery,prop['chart.angles.start']+prop['chart.labels.min.offset.angle'],this.radius-(this.width/2));RG.text2(this,{font:prop['chart.labels.min.font']||prop['chart.text.font'],bold:prop['chart.labels.min.bold']||prop['chart.text.bold'],size:prop['chart.labels.min.size']||prop['chart.text.size'],x:xy[0]+prop['chart.labels.min.offsetx'],y:xy[1]+prop['chart.labels.min.offsety'],valign:valign,halign:halign,text:min,color:prop['chart.labels.min.color']||prop['chart.text.color'],italic:prop['chart.labels.min.italic']});if(prop['chart.angles.end']===RGraph.TWOPI){var halign='center';var valign='top';}else if(prop['chart.angles.end']>=RGraph.TWOPI){var halign='right';var valign='center';}else if(prop['chart.angles.end']<=RGraph.TWOPI){var halign='left';var valign='center';}\nvar xy=RG.getRadiusEndPoint(this.centerx,this.centery,prop['chart.angles.end']+prop['chart.labels.max.offset.angle'],this.radius-(this.width/2));RG.text2(this,{font:prop['chart.labels.max.font']||prop['chart.text.font'],bold:prop['chart.labels.max.bold']||prop['chart.text.bold'],size:prop['chart.labels.max.size']||prop['chart.text.size'],x:xy[0]+prop['chart.labels.max.offsetx'],y:xy[1]+prop['chart.labels.max.offsety'],valign:valign,halign:halign,text:max,color:prop['chart.labels.max.color']||prop['chart.text.color'],italic:prop['chart.labels.max.italic']});if(prop['chart.labels.center']){var ret=RG.text2(this,{font:prop['chart.labels.center.font']||prop['chart.text.font'],size:prop['chart.labels.center.size']||50,bold:prop['chart.labels.center.bold'],italic:prop['chart.labels.center.italic'],x:this.centerx,y:this.centery,valign:prop['chart.labels.center.valign'],halign:'center',text:RG.numberFormat(this,this.value.toFixed(prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']),color:prop['chart.labels.center.color']||prop['chart.text.color']});if(prop['chart.labels.center.fade']&&ret.node){ret.node.style.opacity=0;var delay=25,incr=0.1;for(var i=0;i<10;++i){(function(index)\n{setTimeout(function()\n{ret.node.style.opacity=incr*index;},delay*(index+1));})(i);}}}\nRG.drawTitle(this,prop['chart.title'],this.gutterTop,null,prop['chart.title.size']);};this.getShape=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]\npa2(co,'b a % % % % % false a % % % % % true',this.coords[0][0],this.coords[0][1],this.coords[0][2],this.coords[0][3],this.coords[0][6],this.coords[0][0],this.coords[0][1],this.coords[0][2]-this.coords[0][5],this.coords[0][6],this.coords[0][3]);if(co.isPointInPath(mouseX,mouseY)){return{object:this,0:this,x:this.coords[0][0],1:this.coords[0][0],y:this.coords[0][1],2:this.coords[0][1],radius:this.coords[0][2],3:this.coords[0][2],width:this.coords[0][5],4:this.coords[0][5],start:this.coords[0][3],5:this.coords[0][3],end:this.coords[0][6],6:this.coords[0][6],index:0,tooltip:!RG.isNull(prop['chart.tooltips'])?prop['chart.tooltips'][0]:null};}};this.getValue=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1],angle=RG.getAngleByXY(this.centerx,this.centery,mouseX,mouseY);if(angle&&mouseX>=this.centerx&&mouseY>this.centery){angle+=RGraph.TWOPI;}\nif(angle<prop['chart.angles.start']&&mouseX>this.centerx){angle=prop['chart.angles.end'];}\nif(angle<prop['chart.angles.start']){angle=prop['chart.angles.start'];}\nvar value=(((angle-prop['chart.angles.start'])/(prop['chart.angles.end']-prop['chart.angles.start']))*(this.max-this.min))+this.min;value=ma.max(value,this.min);value=ma.min(value,this.max);return value;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{pa2(co,'lw 5 b a % % % % % false a % % % % % true c s % f % lw 1',shape.x,shape.y,shape.radius,shape.start,shape.end,shape.x,shape.y,shape.radius-shape.width,shape.end,shape.start,prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);pa2(co,'b a % % % % % false',this.centerx,this.centery,this.radius,prop['chart.angles.start'],prop['chart.angles.end']);pa2(co,'a % % % % % true',this.centerx,this.centery,this.radius-this.width,prop['chart.angles.end'],prop['chart.angles.start']);return co.isPointInPath(mouseXY[0],mouseXY[1])?this:null;};this.allowAdjusting=this.AllowAdjusting=function(){};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var value=this.getValue(e);if(typeof value==='number'){RG.fireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(this.canvas);}}};this.getAngle=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar angle=(value/this.max)*(prop['chart.angles.end']-prop['chart.angles.start'])\nangle+=prop['chart.angles.start'];return angle;};this.overChartArea=function(e)\n{var mouseXY=RGraph.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]\npa2(co,'b a % % % % % false a % % % % % true',this.coords[0][0],this.coords[0][1],this.coords[0][2],prop['chart.angles.start'],prop['chart.angles.end'],this.coords[0][0],this.coords[0][1],this.coords[0][2]-this.coords[0][5],prop['chart.angles.end'],prop['chart.angles.start']);return co.isPointInPath(mouseX,mouseY);};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);}\nprop['chart.colors'][0]=this.parseSingleColorForGradient(prop['chart.colors'][0]);prop['chart.colors'][1]=this.parseSingleColorForGradient(prop['chart.colors'][1]);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof color!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}\nreturn grad?grad:color;}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.exec=function(func)\n{func(this);return this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this,initial_value=this.currentValue,opt=arguments[0]||{},numFrames=opt.frames||30,frame=0,callback=arguments[1]||function(){},diff=this.value-Number(this.currentValue),increment=diff/numFrames\nfunction iterator()\n{frame++;if(frame<=numFrames){obj.value=initial_value+(increment*frame);RG.clear(ca);RG.redrawCanvas(ca);RG.Effects.updateCanvas(iterator);}else{callback();}}\niterator();return this;};RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.bar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Bar=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.data=conf.data;this.type='bar';this.coords=[];this.coords2=[];this.stackedBackfaces=[];this.originalColors={};this.gradientCounter=1;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,variant:null,variant3dOffsetx:10,variant3dOffsety:5,backgroundColor:null,backgroundImage:null,backgroundImageAspect:'none',backgroundImageStretch:true,backgroundImageOpacity:null,backgroundImageX:null,backgroundImageY:null,backgroundImageW:null,backgroundImageH:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,colors:['red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black','red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black'],colorsSequential:false,strokestyle:'rgba(0,0,0,0)',errorbars:null,hmargin:3,hmarginGrouped:2,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:3,yaxisColor:'black',yaxisScale:true,yaxisLabels:null,yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisLabelsCount:5,yaxisUnitsPre:'',yaxisUnitsPost:'',yaxisStrict:false,yaxisDecimals:0,yaxisPoint:'.',yaxisThousand:',',yaxisRound:false,yaxisMax:null,yaxisMin:0,yaxisFormatter:null,xaxis:true,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisLabels:null,xaxisLabelsPosition:'section',xaxisLabelsPositionSectionTickmarksCount:null,xaxisColor:'black',xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,labelsAbove:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:null,labelsAboveBackgroundPadding:0,labelsAboveUnitsPre:null,labelsAboveUnitsPost:null,labelsAbovePoint:null,labelsAboveThousand:null,labelsAboveFormatter:null,labelsAboveDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:0,labelsAboveHalign:'center',labelsAboveValign:'bottom',labelsAboveSpecific:null,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,linewidth:1,grouping:'grouped',tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,errorbars:null,errorbarsColor:'black',errorbarsLinewidth:1,errorbarsCapwidth:10,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null,keyTextFont:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));if(prop.variant!=='3d'){prop.variant3dOffsetx=0;prop.variant3dOffsety=0;}else{this.svg.all.setAttribute('transform','skewY(5)');}\nRG.SVG.createDefs(this);this.coords=[];this.coords2=[];this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.data_seq=RG.SVG.arrayLinearize(this.data);if(prop.errorbars){for(var i=0;i<this.data_seq.length;++i){if(typeof prop.errorbars[i]==='undefined'||RG.SVG.isNull(prop.errorbars[i])){prop.errorbars[i]={max:null,min:null};}else if(typeof prop.errorbars[i]==='number'){prop.errorbars[i]={min:prop.errorbars[i],max:prop.errorbars[i]};}else if(typeof prop.errorbars[i]==='object'&&typeof prop.errorbars[i].max==='undefined'){prop.errorbars[i].max=null;}else if(typeof prop.errorbars[i]==='object'&&typeof prop.errorbars[i].min==='undefined'){prop.errorbars[i].min=null;}}}\nRG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();var values=[];for(var i=0,max=0;i<this.data.length;++i){if(prop.errorbars&&typeof prop.errorbars[i]==='number'){var errorbar=prop.errorbars[i];}else if(prop.errorbars&&typeof prop.errorbars[i]==='object'&&typeof prop.errorbars[i].max==='number'){var errorbar=prop.errorbars[i].max;}else{var errorbar=0;}\nif(typeof this.data[i]==='number'){values.push(this.data[i]+errorbar);}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='grouped'){values.push(RG.SVG.arrayMax(this.data[i])+errorbar);}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='stacked'){values.push(RG.SVG.arraySum(this.data[i])+errorbar);}}\nvar max=RG.SVG.arrayMax(values);if(typeof prop.yaxisMax==='number'){max=prop.yaxisMax;}\nif(prop.yaxisMin==='mirror'||prop.yaxisMin==='middle'||prop.yaxisMin==='center'){var mirrorScale=true;prop.yaxisMin=0;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:max,min:prop.yaxisMin,point:prop.yaxisPoint,round:prop.yaxisRound,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});if(mirrorScale){this.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:this.scale.max,min:this.scale.max* -1,point:prop.yaxisPoint,round:false,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});}\nthis.max=this.scale.max;this.min=this.scale.min;RG.SVG.drawBackground(this);if(prop.variant==='3d'){RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M {1} {2} L {3} {4} L {5} {6} L {7} {8}'.format(prop.gutterLeft,prop.gutterTop,prop.gutterLeft+prop.variant3dOffsetx,prop.gutterTop-prop.variant3dOffsety,prop.gutterLeft+prop.variant3dOffsetx,this.height-prop.gutterBottom-prop.variant3dOffsety,prop.gutterLeft,this.height-prop.gutterBottom,prop.gutterLeft,prop.gutterTop),fill:'#ddd',stroke:'#ccc'}});this.threed_xaxis_group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{className:'rgraph_3d_bar_xaxis_negative'}});RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M {1} {2} L {3} {4} L {5} {6} L {7} {8}'.format(prop.gutterLeft,this.getYCoord(0),prop.gutterLeft+prop.variant3dOffsetx,this.getYCoord(0)-prop.variant3dOffsety,this.width-prop.gutterRight+prop.variant3dOffsetx,this.getYCoord(0)-prop.variant3dOffsety,this.width-prop.gutterRight,this.getYCoord(0),prop.gutterLeft,this.getYCoord(0)),fill:'#ddd',stroke:'#ccc'}});}\nthis.drawBars();RG.SVG.drawXAxis(this);RG.SVG.drawYAxis(this);this.drawLabelsAbove();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.attribution(this);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBars=function()\n{var y=this.getYCoord(0);if(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nfor(var i=0,sequentialIndex=0;i<this.data.length;++i,++sequentialIndex){if(typeof this.data[i]==='number'){var outerSegment=this.graphWidth/this.data.length,height=(ma.abs(this.data[i])-ma.abs(this.scale.min))/(ma.abs(this.scale.max)-ma.abs(this.scale.min))*this.graphHeight,width=(this.graphWidth/this.data.length)-prop.hmargin-prop.hmargin,x=prop.gutterLeft+prop.hmargin+(outerSegment*i);if(this.scale.min>=0&&this.scale.max>0){y=this.getYCoord(this.scale.min)-height;}else if(this.scale.min<0&&this.scale.max>0){height=(ma.abs(this.data[i])/(this.scale.max-this.scale.min))*this.graphHeight;y=this.getYCoord(0)-height;if(this.data[i]<0){y=this.getYCoord(0);}}else if(this.scale.min<0&&this.scale.max<0){height=(ma.abs(this.data[i])-ma.abs(this.scale.max))/(ma.abs(this.scale.min)-ma.abs(this.scale.max))*this.graphHeight;y=prop.gutterTop;}\nvar rect=RG.SVG.create({svg:this.svg,type:'rect',parent:prop.variant==='3d'&&this.data[i]<0?this.threed_xaxis_group:this.svg.all,attr:{stroke:prop.strokestyle,fill:prop.colorsSequential?(prop.colors[sequentialIndex]?prop.colors[sequentialIndex]:prop.colors[prop.colors.length-1]):prop.colors[0],x:x,y:y,width:width<0?0:width,height:height,'stroke-width':prop.linewidth,'data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-index':i,'data-sequential-index':sequentialIndex,'data-value':this.data[i],filter:prop.shadow?'url(#dropShadow)':''}});this.drawErrorbar({object:this,element:rect,index:i,value:this.data[i],type:'normal'});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[0]){this.coords2[0]=[];}\nthis.coords2[0].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(prop.variant==='3d'){this.drawTop3dFace({rect:rect,value:this.data[i]});this.drawSide3dFace({rect:rect,value:this.data[i]});}\nif(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:idx,group:null,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i,sequentialIndex);}}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='grouped'){var outerSegment=(this.graphWidth/this.data.length),innerSegment=outerSegment-(2*prop.hmargin);for(var j=0;j<this.data[i].length;++j,++sequentialIndex){var width=((innerSegment-((this.data[i].length-1)*prop.hmarginGrouped))/this.data[i].length),x=(outerSegment*i)+prop.hmargin+prop.gutterLeft+(j*width)+((j-1)*prop.hmarginGrouped);x=prop.gutterLeft+(outerSegment*i)+(width*j)+prop.hmargin+(j*prop.hmarginGrouped);if(this.scale.min===0&&this.scale.max>this.scale.min){var height=((this.data[i][j]-this.scale.min)/(this.scale.max-this.scale.min))*this.graphHeight,y=this.getYCoord(0)-height;}else if(this.scale.max<=0&&this.scale.min<this.scale.max){var height=((this.data[i][j]-this.scale.max)/(this.scale.max-this.scale.min))*this.graphHeight,y=this.getYCoord(this.scale.max);height=ma.abs(height);}else if(this.scale.max>0&&this.scale.min<0){var height=(ma.abs(this.data[i][j])/(this.scale.max-this.scale.min))*this.graphHeight,y=this.data[i][j]<0?this.getYCoord(0):this.getYCoord(this.data[i][j]);}else if(this.scale.min>0&&this.scale.max>this.scale.min){var height=(ma.abs(this.data[i][j]-this.scale.min)/(this.scale.max-this.scale.min))*this.graphHeight,y=this.getYCoord(this.scale.min)-height;}\nvar rect=RG.SVG.create({svg:this.svg,parent:prop.variant==='3d'&&this.data[i][j]<0?this.threed_xaxis_group:this.svg.all,type:'rect',attr:{stroke:prop['strokestyle'],fill:(prop.colorsSequential&&prop.colors[sequentialIndex])?prop.colors[sequentialIndex]:prop.colors[j],x:x,y:y,width:width,height:height,'stroke-width':prop.linewidth,'data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-index':i,'data-subindex':j,'data-sequential-index':sequentialIndex,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[sequentialIndex]:'','data-value':this.data[i][j],filter:prop.shadow?'url(#dropShadow)':''}});this.drawErrorbar({object:this,element:rect,index:sequentialIndex,value:this.data[i][j],type:'grouped'});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(prop.variant==='3d'){this.drawTop3dFace({rect:rect,value:this.data[i][j]});this.drawSide3dFace({rect:rect,value:this.data[i][j]});}\nif(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{obj.removeHighlight();var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{RG.SVG.tooltip({object:obj,group:idx,index:indexes[1],sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i,sequentialIndex);}}\n--sequentialIndex;}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='stacked'){var section=(this.graphWidth/this.data.length);var y=this.getYCoord(0);for(var j=0;j<this.data[i].length;++j,++sequentialIndex){var height=(this.data[i][j]/(this.max-this.min))*this.graphHeight,width=section-(2*prop.hmargin),x=prop.gutterLeft+(i*section)+prop.hmargin,y=y-height;if(j===0&&prop.shadow){var fullHeight=(RG.SVG.arraySum(this.data[i])/(this.max-this.min))*this.graphHeight;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{fill:'white',x:x,y:this.height-prop.gutterBottom-fullHeight,width:width,height:fullHeight,'stroke-width':0,'data-index':i,filter:'url(#dropShadow)'}});this.stackedBackfaces[i]=rect;}\nvar rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{stroke:prop['strokestyle'],fill:prop.colorsSequential?(prop.colors[sequentialIndex]?prop.colors[sequentialIndex]:prop.colors[prop.colors.length-1]):prop.colors[j],x:x,y:y,width:width,height:height,'stroke-width':prop.linewidth,'data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-index':i,'data-subindex':j,'data-sequential-index':sequentialIndex,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[sequentialIndex]:'','data-value':this.data[i][j]}});if(j===(this.data[i].length-1)){this.drawErrorbar({object:this,element:rect,index:i,value:this.data[i][j],type:'stacked'});}\nthis.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(prop.variant==='3d'){this.drawTop3dFace({rect:rect,value:this.data[i][j]});this.drawSide3dFace({rect:rect,value:this.data[i][j]});}\nif(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);RG.SVG.tooltip({object:obj,index:indexes[1],group:idx,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);})(i,sequentialIndex);}}\n--sequentialIndex;}}};this.getYCoord=function(value)\n{if(value>this.scale.max){return null;}\nvar y,xaxispos=prop.xaxispos;if(value<this.scale.min){return null;}\ny=((value-this.scale.min)/(this.scale.max-this.scale.min));y*=(this.height-prop.gutterTop-prop.gutterBottom);y=this.height-prop.gutterBottom-y;return y;};this.highlight=function(rect)\n{var x=rect.getAttribute('x'),y=rect.getAttribute('y'),width=rect.getAttribute('width'),height=rect.getAttribute('height');var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{stroke:prop.highlightStroke,fill:prop.highlightFill,x:x,y:y,width:width,height:height,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});if(prop.tooltipsEvent==='mousemove'){}\nRG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i]});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor});};this.drawLabelsAbove=function()\n{if(prop.labelsAbove){var data_seq=RG.SVG.arrayLinearize(this.data),seq=0,stacked_total=0;;for(var i=0;i<this.coords.length;++i,seq++){var num=typeof this.data[i]==='number'?this.data[i]:data_seq[seq];if(prop.grouping==='stacked'){var indexes=RG.SVG.sequentialIndexToGrouped(i,this.data);var group=indexes[0];var datapiece=indexes[1];if(datapiece!==(this.data[group].length-1)){continue;}else{num=RG.SVG.arraySum(this.data[group]);}}\nvar str=RG.SVG.numberFormat({object:this,num:num.toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[seq]==='string'||typeof prop.labelsAboveSpecific[seq]==='number')){str=prop.labelsAboveSpecific[seq];}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[seq]!=='string'&&typeof prop.labelsAboveSpecific[seq]!=='number'){continue;}\nvar x=parseFloat(this.coords[i].element.getAttribute('x'))+parseFloat(this.coords[i].element.getAttribute('width')/2)+prop.labelsAboveOffsetx;if(data_seq[i]>=0){var y=parseFloat(this.coords[i].element.getAttribute('y'))-7+prop.labelsAboveOffsety;var valign=prop.labelsAboveValign;}else{var y=parseFloat(this.coords[i].element.getAttribute('y'))+parseFloat(this.coords[i].element.getAttribute('height'))+7-prop.labelsAboveOffsety;var valign=prop.labelsAboveValign==='top'?'bottom':'top';}\nRG.SVG.text({object:this,parent:this.svg.all,text:str,x:x,y:y,halign:prop.labelsAboveHalign,valign:valign,tag:'labels.above',font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:prop.labelsAboveBold||prop.textBold,italic:prop.labelsAboveItalic||prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground||null,padding:prop.labelsAboveBackgroundPadding||0});}}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};this.drawTop3dFace=function(opt)\n{var rect=opt.rect,arr=[parseInt(rect.getAttribute('fill')),'rgba(255,255,255,0.7)'],x=parseInt(rect.getAttribute('x')),y=parseInt(rect.getAttribute('y')),w=parseInt(rect.getAttribute('width')),h=parseInt(rect.getAttribute('height')),value=parseFloat(rect.getAttribute('data-value'));rect.rgraph_3d_top_face=[];for(var i=0;i<2;++i){var color=(i===0?rect.getAttribute('fill'):'rgba(255,255,255,0.7)');var face=RG.SVG.create({svg:this.svg,type:'path',parent:prop.variant==='3d'&&opt.value<0?this.threed_xaxis_group:this.svg.all,attr:{stroke:prop.strokestyle,fill:color,'stroke-width':prop.linewidth,d:'M {1} {2} L {3} {4} L {5} {6} L {7} {8}'.format(x,y,x+prop.variant3dOffsetx,y-prop.variant3dOffsety,x+w+prop.variant3dOffsetx,y-prop.variant3dOffsety,x+w,y)}});rect.rgraph_3d_top_face[i]=face}};this.drawSide3dFace=function(opt)\n{var rect=opt.rect,arr=[parseInt(rect.getAttribute('fill')),'rgba(0,0,0,0.3)'],x=parseInt(rect.getAttribute('x')),y=parseInt(rect.getAttribute('y')),w=parseInt(rect.getAttribute('width')),h=parseInt(rect.getAttribute('height'));rect.rgraph_3d_side_face=[];for(var i=0;i<2;++i){var color=(i===0?rect.getAttribute('fill'):'rgba(0,0,0,0.3)');var face=RG.SVG.create({svg:this.svg,type:'path',parent:prop.variant==='3d'&&opt.value<0?this.threed_xaxis_group:this.svg.all,attr:{stroke:prop.strokestyle,fill:color,'stroke-width':prop.linewidth,d:'M {1} {2} L {3} {4} L {5} {6} L {7} {8}'.format(x+w,y,x+w+prop.variant3dOffsetx,y-prop.variant3dOffsety,x+w+prop.variant3dOffsetx,y+h-prop.variant3dOffsety,x+w,y+h)}});rect.rgraph_3d_side_face[i]=face}};this.drawErrorbar=function(opt)\n{var prop=this.properties,index=opt.index,datapoint=opt.value,linewidth=RG.SVG.getErrorbarsLinewidth({object:this,index:index}),color=RG.SVG.getErrorbarsColor({object:this,index:index}),capwidth=RG.SVG.getErrorbarsCapWidth({object:this,index:index}),element=opt.element,type=opt.type;var max=RG.SVG.getErrorbarsMaxValue({object:this,index:index});var min=RG.SVG.getErrorbarsMinValue({object:this,index:index});if(!max&&!min){return;}\nif(type==='stacked'){datapoint=RG.SVG.arraySum(this.data[index]);}\nif(datapoint>=0){var x1=parseFloat(element.getAttribute('x'))+(parseFloat(element.getAttribute('width'))/2);var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x1,y1:parseFloat(element.getAttribute('y')),x2:x1,y2:this.getYCoord(parseFloat(datapoint+max)),stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:parseFloat(errorbarLine.getAttribute('x1'))-(capwidth/2),y1:errorbarLine.getAttribute('y2'),x2:parseFloat(errorbarLine.getAttribute('x1'))+(capwidth/2),y2:errorbarLine.getAttribute('y2'),stroke:color,'stroke-width':linewidth}});if(typeof min==='number'){var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x1,y1:parseFloat(element.getAttribute('y')),x2:x1,y2:this.getYCoord(parseFloat(datapoint-min)),stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:parseFloat(errorbarLine.getAttribute('x1'))-(capwidth/2),y1:errorbarLine.getAttribute('y2'),x2:parseFloat(errorbarLine.getAttribute('x1'))+(capwidth/2),y2:errorbarLine.getAttribute('y2'),stroke:color,'stroke-width':linewidth}});}}else if(datapoint<0){var x1=parseFloat(element.getAttribute('x'))+(parseFloat(element.getAttribute('width'))/2),y1=parseFloat(element.getAttribute('y'))+parseFloat(element.getAttribute('height')),y2=this.getYCoord(parseFloat(datapoint-ma.abs(max)))\nvar errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x1,y1:y1,x2:x1,y2:y2,stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:parseFloat(errorbarLine.getAttribute('x1'))-(capwidth/2),y1:errorbarLine.getAttribute('y2'),x2:parseFloat(errorbarLine.getAttribute('x1'))+(capwidth/2),y2:errorbarLine.getAttribute('y2'),stroke:color,'stroke-width':linewidth}});if(typeof min==='number'){var x1=parseFloat(element.getAttribute('x'))+(parseFloat(element.getAttribute('width'))/2);var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x1,y1:this.getYCoord(parseFloat(datapoint+min)),x2:x1,y2:this.getYCoord(parseFloat(datapoint)),stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:parseFloat(errorbarLine.getAttribute('x1'))-(capwidth/2),y1:errorbarLine.getAttribute('y1'),x2:parseFloat(errorbarLine.getAttribute('x1'))+(capwidth/2),y2:errorbarLine.getAttribute('y1'),stroke:color,'stroke-width':linewidth}});}}};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,obj=this,data=[],height=null,seq=0;data=RG.SVG.arrayClone(this.data);this.draw();var iterate=function()\n{for(var i=0,seq=0,len=obj.coords.length;i<len;++i,++seq){var multiplier=(frame/frames)*RG.SVG.FX.getEasingMultiplier(frames,frame)*RG.SVG.FX.getEasingMultiplier(frames,frame);if(typeof data[i]==='number'){height=ma.abs(obj.getYCoord(data[i])-obj.getYCoord(0));obj.data[i]=data[i]*multiplier;height=multiplier*height;obj.coords[seq].element.setAttribute('height',height);obj.coords[seq].element.setAttribute('y',data[i]<0?obj.getYCoord(0):obj.getYCoord(0)-height);if(prop.variant==='3d'){if(obj.coords[i].element.rgraph_3d_side_face[0].parentNode)obj.coords[i].element.rgraph_3d_side_face[0].parentNode.removeChild(obj.coords[i].element.rgraph_3d_side_face[0]);if(obj.coords[i].element.rgraph_3d_side_face[1].parentNode)obj.coords[i].element.rgraph_3d_side_face[1].parentNode.removeChild(obj.coords[i].element.rgraph_3d_side_face[1]);if(obj.coords[i].element.rgraph_3d_top_face[0].parentNode)obj.coords[i].element.rgraph_3d_top_face[0].parentNode.removeChild(obj.coords[i].element.rgraph_3d_top_face[0]);if(obj.coords[i].element.rgraph_3d_top_face[1].parentNode)obj.coords[i].element.rgraph_3d_top_face[1].parentNode.removeChild(obj.coords[i].element.rgraph_3d_top_face[1]);obj.drawSide3dFace({rect:obj.coords[i].element});if(prop.grouping==='grouped'){obj.drawTop3dFace({rect:obj.coords[i].element});}\nif(obj.coords[i].element.parentNode){var parent=obj.coords[i].element.parentNode;var node=parent.removeChild(obj.coords[i].element);parent.appendChild(node);}}}else if(typeof data[i]==='object'){var accumulativeHeight=0;for(var j=0,len2=data[i].length;j<len2;++j,++seq){height=ma.abs(obj.getYCoord(data[i][j])-obj.getYCoord(0));height=multiplier*height;obj.data[i][j]=data[i][j]*multiplier;height=ma.round(height);obj.coords[seq].element.setAttribute('height',height);obj.coords[seq].element.setAttribute('y',data[i][j]<0?(obj.getYCoord(0)+accumulativeHeight):(obj.getYCoord(0)-height-accumulativeHeight));if(prop.variant==='3d'){if(obj.coords[seq].element.rgraph_3d_side_face[0].parentNode)obj.coords[seq].element.rgraph_3d_side_face[0].parentNode.removeChild(obj.coords[seq].element.rgraph_3d_side_face[0]);if(obj.coords[seq].element.rgraph_3d_side_face[1].parentNode)obj.coords[seq].element.rgraph_3d_side_face[1].parentNode.removeChild(obj.coords[seq].element.rgraph_3d_side_face[1]);if(obj.coords[seq].element.rgraph_3d_top_face[0].parentNode)obj.coords[seq].element.rgraph_3d_top_face[0].parentNode.removeChild(obj.coords[seq].element.rgraph_3d_top_face[0]);if(obj.coords[seq].element.rgraph_3d_top_face[1].parentNode)obj.coords[seq].element.rgraph_3d_top_face[1].parentNode.removeChild(obj.coords[seq].element.rgraph_3d_top_face[1]);obj.drawSide3dFace({rect:obj.coords[seq].element});obj.drawTop3dFace({rect:obj.coords[seq].element});if(obj.coords[seq].element.parentNode){var parent=obj.coords[seq].element.parentNode;var node=parent.removeChild(obj.coords[seq].element);parent.appendChild(node);}}\naccumulativeHeight+=(prop.grouping==='stacked'?height:0);}\nif(obj.stackedBackfaces[i]){obj.stackedBackfaces[i].setAttribute('height',accumulativeHeight);obj.stackedBackfaces[i].setAttribute('y',obj.height-prop.gutterBottom-accumulativeHeight);}\n--seq;}}\nif(frame++<frames){RG.SVG.FX.update(iterate);}else if(opt.callback){(opt.callback)(obj);}};iterate();return this;};this.wave=function()\n{this.draw();var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||60;opt.startFrames=[];opt.counters=[];var framesperbar=opt.frames/3,frame=-1,callback=opt.callback||function(){};for(var i=0,len=this.coords.length;i<len;i+=1){opt.startFrames[i]=((opt.frames/2)/(obj.coords.length-1))*i;opt.counters[i]=0;this.coords[i].element.setAttribute('height',0);if(this.coords[i].element.rgraph_3d_side_face){var parent=this.coords[i].element.rgraph_3d_side_face[0].parentNode;parent.removeChild(this.coords[i].element.rgraph_3d_side_face[0]);parent.removeChild(this.coords[i].element.rgraph_3d_side_face[1]);parent.removeChild(this.coords[i].element.rgraph_3d_top_face[0]);parent.removeChild(this.coords[i].element.rgraph_3d_top_face[1]);}}\nfunction iterator()\n{++frame;for(var i=0,len=obj.coords.length;i<len;i+=1){if(frame>opt.startFrames[i]){var originalHeight=obj.coords[i].element.getAttribute('data-original-height'),height,value=parseFloat(obj.coords[i].element.getAttribute('data-value'));var height=ma.min(((frame-opt.startFrames[i])/framesperbar)*originalHeight,originalHeight);obj.coords[i].element.setAttribute('height',height<0?0:height);obj.coords[i].element.setAttribute('y',value>=0?obj.getYCoord(0)-height:obj.getYCoord(0));if(prop.variant==='3d'){var parent=obj.coords[i].element.rgraph_3d_side_face[0].parentNode;if(parent)parent.removeChild(obj.coords[i].element.rgraph_3d_side_face[0]);if(parent)parent.removeChild(obj.coords[i].element.rgraph_3d_side_face[1]);var parent=obj.coords[i].element.rgraph_3d_top_face[0].parentNode;if(parent)parent.removeChild(obj.coords[i].element.rgraph_3d_top_face[0]);if(parent)parent.removeChild(obj.coords[i].element.rgraph_3d_top_face[1]);if(obj.coords[i].element.parentNode){var parent=obj.coords[i].element.parentNode;var node=parent.removeChild(obj.coords[i].element);parent.appendChild(node);}}\nif(prop.grouping==='stacked'){var seq=obj.coords[i].element.getAttribute('data-sequential-index');var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);if(indexes[1]>0){obj.coords[i].element.setAttribute('y',parseInt(obj.coords[i-1].element.getAttribute('y'))-height);}}\nif(prop.variant==='3d'){obj.drawSide3dFace({rect:obj.coords[i].element,value:obj.coords[i].element.getAttribute('data-value')});if(prop.grouping==='grouped'||(prop.grouping==='stacked'&&(indexes[1]+1)===obj.data[indexes[0]].length)){obj.drawTop3dFace({rect:obj.coords[i].element,value:obj.coords[i].element.getAttribute('data-value')});}}}}\nif(frame>=opt.frames){callback(obj);}else{RG.SVG.FX.update(iterator);}}\niterator();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.bipolar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Bipolar=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.data=[conf.left,conf.right];this.left=conf.left;this.right=conf.right;this.type='bipolar';this.coords=[];this.coordsLeft=[];this.coordsRight=[];this.coords2=[];this.coords2Left=[];this.coords2Right=[];this.stackedBackfacesLeft=[];this.stackedBackfacesRight=[];this.originalColors={};this.gradientCounter=1;this.sequentialIndex=0;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,gutterCenter:null,backgroundColor:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,xaxis:true,xaxisLinewidth:1,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisLabelsCount:5,xaxisLabelsPositionEdgeTickmarksCount:5,xaxisColor:'black',xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,xaxisUnitsPre:'',xaxisUnitsPost:'',xaxisStrict:false,xaxisDecimals:0,xaxisPoint:'.',xaxisThousand:',',xaxisRound:false,xaxisMax:null,xaxisMin:0,xaxisFormatter:null,xaxisTextFont:null,xaxisTextSize:null,xaxisTextBold:null,xaxisTextItalic:null,xaxisTextColor:null,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:5,yaxisColor:'black',yaxisScale:false,yaxisLabels:null,yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisTextFont:null,yaxisTextSize:null,yaxisTextBold:null,yaxisTextItalic:null,yaxisTextColor:null,colors:['red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black','red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black'],colorsSequential:false,strokestyle:'rgba(0,0,0,0)',vmargin:3,vmarginGrouped:2,labelsAbove:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:null,labelsAboveBackgroundPadding:0,labelsAboveUnitsPre:null,labelsAboveUnitsPost:null,labelsAbovePoint:null,labelsAboveThousand:null,labelsAboveFormatter:null,labelsAboveDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:0,labelsAboveSpecific:null,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,linewidth:1,grouping:'grouped',tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null,keyTextFont:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);if(typeof prop.gutterCenter!=='number'){prop.gutterCenter=this.getGutterCenter();}\nthis.coords=[];this.coordsLeft=[];this.coordsRight=[];this.coords2=[];this.coords2Left=[];this.coords2Right=[];this.graphWidth=(this.width-prop.gutterLeft-prop.gutterRight-prop.gutterCenter)/2;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();var values=[];for(var i=0;i<2;++i){for(var j=0,max=0;j<this.data[i].length;++j){if(typeof this.data[i][j]==='number'){values.push(this.data[i][j]);}else if(RG.SVG.isArray(this.data[i][j])&&prop.grouping==='grouped'){values.push(RG.SVG.arrayMax(this.data[i][j]));}else if(RG.SVG.isArray(this.data[i][j])&&prop.grouping==='stacked'){values.push(RG.SVG.arraySum(this.data[i][j]));}}}\nvar max=RG.SVG.arrayMax(values);if(typeof prop.xaxisMax==='number'){max=prop.xaxisMax;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.xaxisLabelsCount,unitsPre:prop.xaxisUnitsPre,unitsPost:prop.xaxisUnitsPost,max:max,min:prop.xaxisMin,point:prop.xaxisPoint,round:prop.xaxisRound,thousand:prop.xaxisThousand,decimals:prop.xaxisDecimals,strict:typeof prop.xaxisMax==='number',formatter:prop.xaxisFormatter});this.max=this.scale.max;this.min=this.scale.min;prop.yaxisMax=this.scale.max;prop.yaxisMin=this.scale.min;this.drawBackground(this);this.drawTitle();this.drawBars();this.drawAxes();this.drawLabels()\nthis.drawLabelsAbove();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RG.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBackground=function()\n{var originalGutterRight=prop.gutterRight,originalGutterLeft=prop.gutterLeft;prop.gutterRight=this.width-(prop.gutterLeft+this.graphWidth);if(RG.SVG.isNull(prop.backgroundGridHlinesCount)){var resetToNull=true;prop.backgroundGridHlinesCount=this.left.length;}\nvar properties=['','Aspect','Opacity','Stretch','X','Y','W','H',];for(i in properties){if(typeof properties[i]==='string'){prop['backgroundImage'+properties[i]]=prop['backgroundImageLeft'+properties[i]];}}\nRG.SVG.drawBackground(this);if(resetToNull){prop.backgroundGridHlinesCount=null;}\nprop.gutterRight=originalGutterRight;prop.gutterLeft=this.width-(prop.gutterRight+this.graphWidth);if(RG.SVG.isNull(prop.backgroundGridHlinesCount)){prop.backgroundGridHlinesCount=this.right.length;}\nvar properties=['','Aspect','Opacity','Stretch','X','Y','W','H',];for(i in properties){if(typeof properties[i]==='string'){prop['backgroundImage'+properties[i]]=prop['backgroundImageRight'+properties[i]];}}\nRG.SVG.drawBackground(this);prop.gutterLeft=originalGutterLeft;prop.gutterRight=originalGutterRight;};this.drawAxes=function()\n{if(prop.xaxis){RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(prop.gutterLeft,this.height-prop.gutterBottom,prop.gutterLeft+this.graphWidth,this.height-prop.gutterBottom),'stroke-width':prop.xaxisLinewidth,stroke:prop.xaxisColor,fill:'rgba(0,0,0,0)','shape-rendering':'crispEdges'}});RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(this.width-prop.gutterRight,this.height-prop.gutterBottom,this.width-prop.gutterRight-this.graphWidth,this.height-prop.gutterBottom),'stroke-width':prop.xaxisLinewidth,stroke:prop.xaxisColor,fill:'rgba(0,0,0,0)','shape-rendering':'crispEdges'}});if(prop.xaxisTickmarks){var startY=this.height-prop.gutterBottom,endY=this.height-prop.gutterBottom+prop.xaxisTickmarksLength;for(var i=0;i<prop.xaxisLabelsPositionEdgeTickmarksCount;++i){var x=prop.gutterLeft+(i*(this.graphWidth/prop.xaxisLabelsPositionEdgeTickmarksCount));RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':prop.xaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nif(!prop.yaxis){var x=prop.gutterLeft+this.graphWidth;RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':prop.xaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nfor(var i=0;i<prop.xaxisLabelsPositionEdgeTickmarksCount;++i){var x=prop.gutterLeft+prop.gutterCenter+this.graphWidth+((i+1)*(this.graphWidth/prop.xaxisLabelsPositionEdgeTickmarksCount));RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':prop.xaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nif(!prop.yaxis){var x=prop.gutterLeft+this.graphWidth+prop.gutterCenter;RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':prop.xaxisLinewidth,'shape-rendering':\"crispEdges\"}});}}}\nif(prop.yaxis){RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(prop.gutterLeft+this.graphWidth,this.height-prop.gutterBottom,prop.gutterLeft+this.graphWidth,prop.gutterTop),'stroke-width':prop.yaxisLinewidth,stroke:prop.yaxisColor,fill:'rgba(0,0,0,0)','shape-rendering':'crispEdges','stroke-linecap':'square'}});RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(prop.gutterLeft+this.graphWidth+prop.gutterCenter,this.height-prop.gutterBottom,prop.gutterLeft+this.graphWidth+prop.gutterCenter,prop.gutterTop),'stroke-width':prop.yaxisLinewidth,stroke:prop.yaxisColor,fill:'rgba(0,0,0,0)','shape-rendering':'crispEdges','stroke-linecap':'square'}});if(prop.yaxisTickmarks){var startX=prop.gutterLeft+this.graphWidth,endX=prop.gutterLeft+this.graphWidth+prop.yaxisTickmarksLength,numticks=this.left.length;for(var i=0;i<numticks;++i){var y=prop.gutterTop+(i*(this.graphHeight/numticks));RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX+0.001,y,endX,y),stroke:prop.yaxisColor,'stroke-width':prop.yaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nif(!prop.xaxis){var y=prop.gutterTop+this.graphHeight;RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX+0.001,y,endX,y),stroke:prop.yaxisColor,'stroke-width':prop.yaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nvar startX=prop.gutterLeft+this.graphWidth+prop.gutterCenter,endX=prop.gutterLeft+this.graphWidth+prop.gutterCenter-prop.yaxisTickmarksLength,numticks=this.right.length;for(var i=0;i<numticks;++i){var y=prop.gutterTop+(i*(this.graphHeight/numticks));RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX+0.001,y,endX,y),stroke:prop.yaxisColor,'stroke-width':prop.yaxisLinewidth,'shape-rendering':\"crispEdges\"}});}\nif(!prop.xaxis){var y=prop.gutterTop+this.graphHeight;RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX+0.001,y,endX,y),stroke:prop.yaxisColor,'stroke-width':prop.yaxisLinewidth,'shape-rendering':\"crispEdges\"}});}}}};this.drawLabels=function()\n{var numlabels=prop.yaxisLabels?prop.yaxisLabels.length:5\nfor(var i=0;i<numlabels;++i){var segment=this.graphHeight/numlabels,y=prop.gutterTop+(segment*i)+(segment/2)+prop.yaxisLabelsOffsety,x=prop.gutterLeft+this.graphWidth+(prop.gutterCenter/2)+prop.yaxisLabelsOffsetx;var text=RG.SVG.text({object:this,parent:this.svg.all,text:prop.yaxisLabels&&prop.yaxisLabels[i]?prop.yaxisLabels[i]:'',x:x,y:y,halign:'center',valign:'center',tag:'labels.yaxis',font:prop.yaxisTextFont||prop.textFont,size:prop.yaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:!RG.SVG.isNull(prop.yaxisTextBold)?prop.yaxisTextBold:prop.textBold,italic:!RG.SVG.isNull(prop.yaxisTextItalic)?prop.yaxisTextItalic:prop.textItalic,color:prop.yaxisTextColor||prop.textColor});}\nvar segment=this.graphWidth/prop.xaxisLabelsCount;for(var i=0;i<this.scale.labels.length;++i){RG.SVG.text({object:this,parent:this.svg.all,text:this.scale.labels[i],x:prop.gutterLeft+this.graphWidth-(segment*(i+1))+prop.xaxisLabelsOffsetx,y:this.height-prop.gutterBottom+10+prop.xaxisLabelsOffsety,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:typeof prop.xaxisTextBold==='boolean'?prop.xaxisTextBold:prop.textBold,italic:typeof prop.xaxisTextItalic==='boolean'?prop.xaxisTextItalic:prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}\nvar y=this.height-prop.gutterBottom+10,str=(prop.xaxisUnitsPre+prop.xaxisMin.toFixed(prop.xaxisDecimals).replace(/\\./,prop.xaxisPoint)+prop.xaxisUnitsPost);var text=RG.SVG.text({object:this,parent:this.svg.all,text:str,x:prop.gutterLeft+this.graphWidth+prop.xaxisLabelsOffsetx,y:y+prop.xaxisLabelsOffsety,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:typeof prop.xaxisTextBold==='boolean'?prop.xaxisTextBold:prop.textBold,italic:typeof prop.xaxisTextItalic==='boolean'?prop.xaxisTextItalic:prop.textItalic,color:prop.xaxisTextColor||prop.textColor});for(var i=0;i<this.scale.labels.length;++i){RG.SVG.text({object:this,parent:this.svg.all,text:this.scale.labels[i],x:prop.gutterLeft+this.graphWidth+prop.gutterCenter+(segment*(i+1))+prop.xaxisLabelsOffsetx,y:this.height-prop.gutterBottom+10+prop.xaxisLabelsOffsety,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:typeof prop.xaxisTextBold==='boolean'?prop.xaxisTextBold:prop.textBold,italic:typeof prop.xaxisTextItalic==='boolean'?prop.xaxisTextItalic:prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}\nvar text=RG.SVG.text({object:this,parent:this.svg.all,text:prop.xaxisUnitsPre+prop.xaxisMin.toFixed(prop.xaxisDecimals).replace(/\\./,prop.xaxisPoint)+prop.xaxisUnitsPost,x:prop.gutterLeft+this.graphWidth+prop.gutterCenter+prop.xaxisLabelsOffsetx,y:this.height-prop.gutterBottom+10+prop.xaxisLabelsOffsety,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:typeof prop.xaxisTextBold==='boolean'?prop.xaxisTextBold:prop.textBold,italic:typeof prop.xaxisTextItalic==='boolean'?prop.xaxisTextItalic:prop.textItalic,color:prop.xaxisTextColor||prop.textColor});};this.drawBars=function()\n{if(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nfor(var i=0;i<this.left.length;++i){if(typeof this.left[i]==='number'){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],y=prop.gutterTop+((this.graphHeight/this.left.length)*i)+prop.vmargin,width=this.getWidth(this.left[i]),x=prop.gutterLeft+this.graphWidth-width,height=(this.graphHeight/this.left.length)-prop.vmargin-prop.vmargin;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[0],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-sequential-index':this.sequentialIndex,'data-value':this.left[i],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsLeft.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}else if(RG.SVG.isArray(this.left[i])&&prop.grouping==='stacked'){var accWidth=0;for(var j=0;j<this.left[i].length;++j){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],y=prop.gutterTop+((this.graphHeight/this.left.length)*i)+prop.vmargin,width=this.getWidth(this.left[i][j]),accWidth=accWidth+width,x=prop.gutterLeft+this.graphWidth-accWidth,height=(this.graphHeight/this.left.length)-prop.vmargin-prop.vmargin;if(j===0&&prop.shadow){var shadowBackfaceX=prop.gutterLeft+this.graphWidth-this.getWidth(RG.SVG.arraySum(this.left[i])),shadowBackfaceWidth=this.getWidth(RG.SVG.arraySum(this.left[i]));var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{fill:'#eee',x:shadowBackfaceX,y:y,width:shadowBackfaceWidth,height:height,'stroke-width':0,'data-index':i,filter:'url(#dropShadow)'}});this.stackedBackfacesLeft[i]=rect;}\nvar rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[j],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-subindex':j,'data-sequential-index':this.sequentialIndex,'data-value':this.left[i][j]}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsLeft.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nif(!this.coords2Left[i]){this.coords2Left[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coords2Left[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}}else if(RG.SVG.isArray(this.left[i])&&prop.grouping==='grouped'){for(var j=0;j<this.left[i].length;++j){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],height=((this.graphHeight/this.left.length)-prop.vmargin-prop.vmargin-(prop.vmarginGrouped*(this.left[i].length-1)))/this.left[i].length,y=prop.gutterTop+((this.graphHeight/this.left.length)*i)+prop.vmargin+(height*j)+(j*prop.vmarginGrouped),width=this.getWidth(this.left[i][j]),x=prop.gutterLeft+this.graphWidth-width;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[j],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-subindex':j,'data-sequential-index':this.sequentialIndex,'data-value':this.left[i][j],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsLeft.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nif(!this.coords2Left[i]){this.coords2Left[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coords2Left[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}}}\nfor(var i=0;i<this.right.length;++i){if(typeof this.right[i]==='number'){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],y=prop.gutterTop+((this.graphHeight/this.right.length)*i)+prop.vmargin,width=this.getWidth(this.right[i]),x=prop.gutterLeft+this.graphWidth+prop.gutterCenter,height=(this.graphHeight/this.right.length)-prop.vmargin-prop.vmargin;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[0],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-sequential-index':this.sequentialIndex,'data-value':this.right[i],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsRight.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}else if(RG.SVG.isArray(this.right[i])&&prop.grouping==='stacked'){var accWidth=0;for(var j=0;j<this.right[i].length;++j){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],y=prop.gutterTop+((this.graphHeight/this.right.length)*i)+prop.vmargin,width=this.getWidth(this.right[i][j]),x=prop.gutterLeft+this.graphWidth+prop.gutterCenter+accWidth,accWidth=accWidth+width,height=(this.graphHeight/this.left.length)-prop.vmargin-prop.vmargin;if(j===0&&prop.shadow){var shadowBackfaceX=prop.gutterLeft+this.graphWidth+prop.gutterCenter,shadowBackfaceWidth=this.getWidth(RG.SVG.arraySum(this.right[i]));var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{fill:'#eee',x:shadowBackfaceX,y:y,width:shadowBackfaceWidth,height:height,'stroke-width':0,'data-index':i,filter:'url(#dropShadow)'}});this.stackedBackfacesRight[i]=rect;}\nvar rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[j],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-subindex':j,'data-sequential-index':this.sequentialIndex,'data-value':this.right[i][j]}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsRight.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i+this.left.length]){this.coords2[i+this.left.length]=[];}\nif(!this.coords2Right[i]){this.coords2Right[i]=[];}\nthis.coords2[i+this.left.length].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coords2Right[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}}else if(RG.SVG.isArray(this.right[i])&&prop.grouping==='grouped'){for(var j=0;j<this.right[i].length;++j){var color=prop.colors[this.sequentialIndex],tooltip=RG.SVG.isNull(prop.tooltips)?null:prop.tooltips[this.sequentialIndex],height=((this.graphHeight/this.right.length)-prop.vmargin-prop.vmargin-(prop.vmarginGrouped*(this.right[i].length-1)))/this.right[i].length,y=prop.gutterTop+((this.graphHeight/this.right.length)*i)+prop.vmargin+(height*j)+(j*prop.vmarginGrouped),width=this.getWidth(this.right[i][j]),x=prop.gutterLeft+this.graphWidth+prop.gutterCenter;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:width,height:height,fill:prop.colorsSequential?prop.colors[this.sequentialIndex]:prop.colors[j],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-original-x':x,'data-original-y':y,'data-original-width':width,'data-original-height':height,'data-tooltop':(tooltip||''),'data-index':i,'data-subindex':j,'data-sequential-index':this.sequentialIndex,'data-value':this.right[i][j],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coordsRight.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i+this.left.length]){this.coords2[i+this.left.length]=[];}\nif(!this.coords2Right[i]){this.coords2Right[i]=[];}\nthis.coords2[i+this.left.length].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.coords2Right[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});this.installTooltipsEventListeners({rect:rect,index:i,sequentialIndex:this.sequentialIndex});this.sequentialIndex++;}}}};this.installTooltipsEventListeners=function(opt)\n{var obj=this;if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[this.sequentialIndex]){(function(idx,seq)\n{opt.rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:idx,group:null,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);opt.rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(opt.index,opt.sequentialIndex);}};this.getWidth=function(value)\n{var x1=this.getLeftXCoord(0),x2=this.getLeftXCoord(value);if(RG.SVG.isNull(x1)||RG.SVG.isNull(x2)){return null;}\nreturn x1-x2;};this.getLeftXCoord=function(value)\n{var width;if(value>this.scale.max){return null;}\nif(value<this.scale.min){return null;}\nwidth=((value-this.scale.min)/(this.scale.max-this.scale.min));width*=this.graphWidth;var x=prop.gutterLeft+this.graphWidth-width;return x;};this.getRightXCoord=function(value)\n{var width;if(value>this.scale.max){return null;}\nif(value<this.scale.min){return null;}\nwidth=((value-this.scale.min)/(this.scale.max-this.scale.min));width*=this.graphWidth;var x=prop.gutterLeft+this.graphWidth+prop.gutterCenter+width;return x;};this.highlight=function(rect)\n{var x=parseInt(rect.getAttribute('x')),y=parseInt(rect.getAttribute('y')),width=parseInt(rect.getAttribute('width')),height=parseInt(rect.getAttribute('height'));var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{stroke:prop.highlightStroke,fill:prop.highlightFill,x:x-1,y:y-1,width:width+2,height:height+2},style:{pointerEvents:'none'}});RG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i],direction:'horizontal'});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor,direction:'horizontal'});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill,direction:'horizontal'});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor,direction:'horizontal'});};this.drawLabelsAbove=function()\n{if(prop.labelsAbove){for(var dataset=0,seq=0;dataset<this.data.length;++dataset,++seq){for(var i=0;i<this.data[dataset].length;++i,++seq){var value=this.data[dataset][i],halign=dataset===0?'right':'left',valign='center',hoffset=dataset===0?-10:10;if(typeof value==='number'){var x=parseInt(this.coords[seq].element.getAttribute('x'))+hoffset+prop.labelsAboveOffsetx,height=parseInt(this.coords[seq].element.getAttribute('height')),y=parseInt(this.coords[seq].element.getAttribute('y'))+(height/2)+prop.labelsAboveOffsety,width=parseInt(this.coords[seq].element.getAttribute('width'));if(dataset===1){x+=width;}\nvar str=RG.SVG.numberFormat({object:this,num:value.toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[seq]==='string'||typeof prop.labelsAboveSpecific[seq]==='number')){str=parseStr(prop.labelsAboveSpecific[seq]);}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[seq]!=='string'&&typeof prop.labelsAboveSpecific[seq]!=='number'){continue;}\nRG.SVG.text({object:this,parent:this.svg.all,text:str,x:x,y:y,halign:halign,valign:valign,tag:'labels.above',font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:typeof prop.labelsAboveBold==='boolean'?prop.labelsAboveBold:prop.textBold,italic:typeof prop.labelsAboveItalic==='boolean'?prop.labelsAboveItalic:prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground,padding:prop.labelsAboveBackgroundPadding});}else if(typeof value==='object'&&prop.grouping==='stacked'){for(var k=0,sum=0,width=0;k<this.coords2[i].length;++k){sum+=parseFloat(this.coords2[i][k].element.getAttribute('data-value'));}\nvar len=this.coords2[i].length;if(dataset===0){var x=parseFloat(this.coords2[i][len-1].x)+hoffset,height=parseFloat(this.coords2[i][len-1].height),y=parseFloat(this.coords2[i][0].y)+(height/2);}else{var x=parseFloat(this.coords2[this.data[0].length+i][0].x)+hoffset+prop.labelsAboveOffsetx,height=parseFloat(this.coords2[i][len-1].height),y=parseFloat(this.coords2[i][0].y)+(height/2)+prop.labelsAboveOffsety;for(var j=0;j<this.coords2Right[i].length;++j){x+=this.coords2Right[i][j].width;}}\nvar str=RG.SVG.numberFormat({object:this,num:sum.toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[seq]==='string'||typeof prop.labelsAboveSpecific[seq]==='number')){str=parseStr(prop.labelsAboveSpecific[seq]);}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[seq]!=='string'&&typeof prop.labelsAboveSpecific[seq]!=='number'){continue;}\nRG.SVG.text({object:this,parent:this.svg.all,text:str,x:x,y:y,halign:halign,valign:valign,tag:'labels.above',font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:typeof prop.labelsAboveBold==='boolean'?prop.labelsAboveBold:prop.textBold,italic:typeof prop.labelsAboveItalic==='boolean'?prop.labelsAboveItalic:prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground,padding:prop.labelsAboveBackgroundPadding});}else if(typeof value==='object'&&prop.grouping==='grouped'){for(var k=0;k<value.length;++k){val=value[k];var x=parseInt(this.coords[seq].element.getAttribute('x'))+hoffset+prop.labelsAboveOffsetx,height=parseInt(this.coords[seq].element.getAttribute('height')),y=parseInt(this.coords[seq].element.getAttribute('y'))+(height/2)+prop.labelsAboveOffsety,width=parseInt(this.coords[seq].element.getAttribute('width'));if(dataset===1){x+=width;}\nvar str=RG.SVG.numberFormat({object:this,num:parseFloat(val).toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[seq]==='string'||typeof prop.labelsAboveSpecific[seq]==='number')){str=parseStr(prop.labelsAboveSpecific[seq]);}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[seq]!=='string'&&typeof prop.labelsAboveSpecific[seq]!=='number'){continue;}\nRG.SVG.text({object:this,parent:this.svg.all,text:str,x:x,y:y,halign:halign,valign:valign,tag:'labels.above',font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:typeof prop.labelsAboveBold==='boolean'?prop.labelsAboveBold:prop.textBold,italic:typeof prop.labelsAboveItalic==='boolean'?prop.labelsAboveItalic:prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground,padding:prop.labelsAboveBackgroundPadding});seq++;}\nseq--;}}\n--seq;}}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};this.getGutterCenter=function()\n{var bold=typeof prop.yaxisTextBold==='boolean'?prop.yaxisTextBold:prop.textBold,font=typeof prop.yaxisTextFont==='string'?prop.yaxisTextFont:prop.textFont,size=typeof prop.yaxisTextSize==='number'?prop.yaxisTextSize:prop.textSize,width=0;if(prop.yaxisLabels){for(var i=0,len=prop.yaxisLabels.length;i<len;++i){width=ma.max(width,RG.SVG.measureText({text:prop.yaxisLabels[i],bold:bold,font:font,size:size})[0]);}}else{var width=50;}\nreturn width+15;};this.drawTitle=function()\n{if(RG.SVG.isNull(prop.titleX)){prop.titleX=((this.width-prop.gutterLeft-prop.gutterRight)/2)+prop.gutterLeft;}\nRG.SVG.drawTitle(this);};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,obj=this,left=RG.SVG.arrayClone(this.left),right=RG.SVG.arrayClone(this.right),seq=0;this.draw();var iterate=function()\n{for(var i=0,seq=0,len=obj.coordsLeft.length;i<len;++i,++seq){var multiplier=(frame/frames)*RG.SVG.FX.getEasingMultiplier(frames,frame)*RG.SVG.FX.getEasingMultiplier(frames,frame);if(typeof left[i]==='number'){width=ma.abs(obj.getLeftXCoord(left[i])-obj.getLeftXCoord(0));left[i]=obj.left[i]*multiplier;obj.coordsLeft[i].element.setAttribute('width',width);obj.coords[seq].element.setAttribute('x',obj.getLeftXCoord(0)-width);}else if(typeof left[i]==='object'&&prop.grouping==='stacked'){var accumulativeWidth=0;for(var j=0,len2=left[i].length;j<len2;++j,++seq){width=ma.abs(obj.getLeftXCoord(left[i][j])-obj.getLeftXCoord(0));left[i][j]=obj.left[i][j]*multiplier;obj.coords[seq].element.setAttribute('width',width);obj.coords[seq].element.setAttribute('x',obj.getLeftXCoord(0)-width-accumulativeWidth);accumulativeWidth+=(prop.grouping==='stacked'?width:0);}\nif(obj.stackedBackfacesLeft[i]){obj.stackedBackfacesLeft[i].setAttribute('width',accumulativeWidth);obj.stackedBackfacesLeft[i].setAttribute('x',obj.getLeftXCoord(0)-accumulativeWidth);}\n--seq;}else if(typeof left[i]==='object'&&prop.grouping==='grouped'){for(var j=0,len2=left[i].length;j<len2;++j,++seq){width=ma.abs(obj.getLeftXCoord(left[i][j])-obj.getLeftXCoord(0));left[i][j]=obj.left[i][j]*multiplier;obj.coords[seq].element.setAttribute('width',width);obj.coords[seq].element.setAttribute('x',obj.getLeftXCoord(0)-width);}\n--seq;}}\nfor(var i=0,seq=0,len=obj.coordsRight.length;i<len;++i,++seq){var multiplier=(frame/frames)*RG.SVG.FX.getEasingMultiplier(frames,frame)*RG.SVG.FX.getEasingMultiplier(frames,frame);if(typeof right[i]==='number'){width=ma.abs(obj.getRightXCoord(right[i])-obj.getRightXCoord(0));right[i]=obj.right[i]*multiplier;obj.coordsRight[i].element.setAttribute('width',width);obj.coordsRight[seq].element.setAttribute('x',obj.getRightXCoord(0));}else if(typeof right[i]==='object'&&prop.grouping==='stacked'){var accumulativeWidth=0;for(var j=0,len2=right[i].length;j<len2;++j,++seq){width=ma.abs(obj.getRightXCoord(right[i][j])-obj.getRightXCoord(0));right[i][j]=obj.right[i][j]*multiplier;obj.coordsRight[seq].element.setAttribute('width',width);obj.coordsRight[seq].element.setAttribute('x',obj.getRightXCoord(0)+accumulativeWidth);accumulativeWidth+=width;}\nif(obj.stackedBackfacesRight[i]){obj.stackedBackfacesRight[i].setAttribute('width',accumulativeWidth);obj.stackedBackfacesRight[i].setAttribute('x',obj.getRightXCoord(0));}\n--seq;}else if(typeof right[i]==='object'&&prop.grouping==='grouped'){for(var j=0,len2=right[i].length;j<len2;++j,++seq){width=ma.abs(obj.getRightXCoord(right[i][j])-obj.getRightXCoord(0));right[i][j]=obj.right[i][j]*multiplier;obj.coordsRight[seq].element.setAttribute('width',width);obj.coordsRight[seq].element.setAttribute('x',obj.getRightXCoord(0));}\n--seq;}}\nif(frame++<=frames){RG.SVG.FX.update(iterate);}else if(opt.callback){(opt.callback)(obj);}};iterate();return this;};this.wave=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||120,startFrames_left=[],startFrames_right=[],counters_left=[],counters_right=[];var framesperbar=frames/3,frame_left=-1,frame_right=-1,callback=arguments[1]||function(){},original_left=RG.SVG.arrayClone(this.left),original_right=RG.SVG.arrayClone(this.right);for(var i=0,len=this.left.length,seq=0;i<len;i+=1,++seq){startFrames_left[seq]=((frames/3)/(RG.SVG.arrayLinearize(this.left).length-1))*i;startFrames_right[seq]=((frames/3)/(RG.SVG.arrayLinearize(this.right).length-1))*i;counters_left[seq]=0;counters_right[seq]=0;if(RG.SVG.isArray(this.left[i])){for(var j=0;j<this.left[i].length;++j,seq++){startFrames_left[seq]=((frames/3)/(RG.SVG.arrayLinearize(this.left).length-1))*seq;startFrames_right[seq]=((frames/3)/(RG.SVG.arrayLinearize(this.right).length-1))*seq;counters_left[seq]=0;counters_right[seq]=0;}\n--seq;}}\nthis.draw();for(var i=0,len=this.left.length;i<len;i+=1){if(typeof this.left[i]==='number'){this.left[i]=0;this.right[i]=0;this.coordsLeft[i].element.setAttribute('width',0);this.coordsRight[i].element.setAttribute('width',0);}else if(typeof this.left[i]==='object'&&!RG.SVG.isNull(this.left[i])){for(var j=0;j<this.left[i].length;++j){this.left[i][j]=0;this.right[i][j]=0;this.coords2Left[i][j].element.setAttribute('width',0);this.coords2Right[i][j].element.setAttribute('width',0);}}}\nfunction iteratorLeft()\n{++frame_left;for(var i=0,len=obj.left.length,seq=0;i<len;i+=1,seq+=1){if(frame_left>=startFrames_left[seq]){var isNull=RG.SVG.isNull(obj.left[i]);if(typeof obj.left[i]==='number'){obj.left[i]=ma.min(ma.abs(original_left[i]),ma.abs(original_left[i]*((counters_left[i]++)/framesperbar)));var rect_left=obj.coords[i].element;rect_left.setAttribute('width',parseFloat(rect_left.getAttribute('data-original-width'))*(obj.left[i]/rect_left.getAttribute('data-value')));rect_left.setAttribute('x',obj.properties.gutterLeft+obj.graphWidth-(parseFloat(rect_left.getAttribute('data-original-width'))*(obj.left[i]/rect_left.getAttribute('data-value'))));}else if(RG.SVG.isArray(obj.left[i])){for(var j=0,accWidth=0;j<obj.left[i].length;++j,++seq){obj.left[i][j]=ma.min(ma.abs(original_left[i][j]),ma.abs(original_left[i][j]*((counters_left[seq]++)/framesperbar)));var rect_left=obj.coords[seq].element;rect_left.setAttribute('width',parseFloat(rect_left.getAttribute('data-original-width'))*(obj.left[i][j]/rect_left.getAttribute('data-value')));rect_left.setAttribute('x',obj.properties.gutterLeft+obj.graphWidth-(parseFloat(rect_left.getAttribute('data-original-width'))*(obj.left[i][j]/rect_left.getAttribute('data-value')))-accWidth);if(obj.properties.grouping==='stacked'){accWidth+=parseFloat(rect_left.getAttribute('width'));}}\nseq--;}\nif(isNull){obj.left[i]=null;}}else{obj.left[i]=typeof obj.left[i]==='object'&&obj.left[i]?RG.SVG.arrayPad([],obj.left[i].length,0):(RG.SVG.isNull(obj.left[i])?null:0);}}\nif(frame_left<=frames){RG.SVG.FX.update(iteratorLeft);}}\nfunction iteratorRight()\n{++frame_right;for(var i=0,len=obj.right.length,seq=0;i<len;i+=1,seq+=1){if(frame_right>=startFrames_right[seq]){var isNull=RG.SVG.isNull(obj.right[i]);if(typeof obj.right[i]==='number'){obj.right[i]=ma.min(ma.abs(original_right[i]),ma.abs(original_right[i]*((counters_right[i]++)/framesperbar)));var rect_right=obj.coords[i+obj.left.length].element;rect_right.setAttribute('width',parseFloat(rect_right.getAttribute('data-original-width'))*(obj.right[i]/rect_right.getAttribute('data-value')));rect_right.setAttribute('x',obj.properties.gutterLeft+obj.graphWidth+prop.gutterCenter);}else if(RG.SVG.isArray(obj.right[i])){for(var j=0,accWidth=0;j<obj.right[i].length;++j,++seq){obj.right[i][j]=ma.min(ma.abs(original_right[i][j]),ma.abs(original_right[i][j]*((counters_right[seq]++)/framesperbar)));var rect_right=obj.coordsRight[seq].element;rect_right.setAttribute('width',parseFloat(rect_right.getAttribute('data-original-width'))*(obj.right[i][j]/rect_right.getAttribute('data-value')));rect_right.setAttribute('x',obj.properties.gutterLeft+obj.graphWidth+prop.gutterCenter+accWidth);if(obj.properties.grouping==='stacked'){accWidth+=parseFloat(rect_right.getAttribute('width'));}}\nseq--;}\nif(isNull){obj.right[i]=null;}}else{obj.right[i]=typeof obj.right[i]==='object'&&obj.right[i]?RG.SVG.arrayPad([],obj.right[i].length,0):(RG.SVG.isNull(obj.right[i])?null:0);}}\nif(frame_right<=frames){RG.SVG.FX.update(iteratorRight);}else{}}\niteratorLeft();iteratorRight();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.ajax.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true,isRGraphSVG:true};RGraph.SVG=RGraph.SVG||{};RGraph.SVG.AJAX=RGraph.SVG.AJAX||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.AJAX=function(url,callback)\n{if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('GET',url,true);httpRequest.send();};RG.SVG.AJAX.POST=function(url,data,callback)\n{var crumbs=[];if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('POST',url,true);httpRequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");for(i in data){if(typeof i=='string'){crumbs.push(i+'='+encodeURIComponent(data[i]));}}\nhttpRequest.send(crumbs.join('&'));};RG.SVG.AJAX.getNumber=function(url,callback)\n{RG.SVG.AJAX(url,function()\n{var num=parseFloat(this.responseText);callback(num);});};RG.SVG.AJAX.getString=function(url,callback)\n{RG.SVG.AJAX(url,function()\n{var str=String(this.responseText);callback(str);});};RG.SVG.AJAX.getJSON=function(url,callback)\n{RG.SVG.AJAX(url,function()\n{var json=eval('('+this.responseText+')');callback(json);});};RG.SVG.AJAX.getCSV=function(url,callback)\n{var seperator=(typeof arguments[2]==='string'?arguments[2]:','),lineSep=(typeof arguments[3]==='string'?arguments[3]:\"\\r?\\n\");RG.SVG.AJAX(url,function()\n{var text=this.responseText,regexp=new RegExp(seperator),lines=this.responseText.split(lineSep),rows=[];for(var i=0;i<lines.length;++i){var row=lines[i].split(seperator);for(var j=0,len=row.length;j<len;++j){if(row[j].match(/^[0-9.]+$/)){row[j]=parseFloat(row[j]);}}\nrows.push(row);}\ncallback(rows);});};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.core.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true,isRGraphSVG:true};RGraph.SVG=RGraph.SVG||{};RGraph.SVG.FX=RGraph.SVG.FX||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.REG={store:[]};RG.SVG.OR={objects:[]};RG.SVG.TRIG={};RG.SVG.TRIG.HALFPI=ma.PI*.4999;RG.SVG.TRIG.PI=RG.SVG.TRIG.HALFPI*2;RG.SVG.TRIG.TWOPI=RG.SVG.TRIG.PI*2;RG.SVG.ISIE=ua.indexOf('rident')>0;RG.SVG.ISFF=ua.indexOf('irefox')>0;RG.SVG.events=[];RG.SVG.GLOBALS={};RG.SVG.ISFF=ua.indexOf('Firefox')!=-1;RG.SVG.ISOPERA=ua.indexOf('Opera')!=-1;RG.SVG.ISCHROME=ua.indexOf('Chrome')!=-1;RG.SVG.ISSAFARI=ua.indexOf('Safari')!=-1&&!RG.ISCHROME;RG.SVG.ISWEBKIT=ua.indexOf('WebKit')!=-1;RG.SVG.ISIE=ua.indexOf('Trident')>0||navigator.userAgent.indexOf('MSIE')>0;RG.SVG.ISIE6=ua.indexOf('MSIE 6')>0;RG.SVG.ISIE7=ua.indexOf('MSIE 7')>0;RG.SVG.ISIE8=ua.indexOf('MSIE 8')>0;RG.SVG.ISIE9=ua.indexOf('MSIE 9')>0;RG.SVG.ISIE10=ua.indexOf('MSIE 10')>0;RG.SVG.ISIE11UP=ua.indexOf('MSIE')==-1&&ua.indexOf('Trident')>0;RG.SVG.ISIE10UP=RG.SVG.ISIE10||RG.SVG.ISIE11UP;RG.SVG.ISIE9UP=RG.SVG.ISIE9||RG.SVG.ISIE10UP;RG.SVG.createSVG=function(opt)\n{var container=opt.container,obj=opt.object;if(container.__svg__){return container.__svg__;}\nvar svg=doc.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");svg.setAttribute('style','top: 0; left: 0; position: absolute');svg.setAttribute('width',container.offsetWidth);svg.setAttribute('height',container.offsetHeight);svg.setAttribute('version','1.1');svg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\",'xmlns','http://www.w3.org/2000/svg');svg.setAttributeNS(\"http://www.w3.org/2000/xmlns/\",\"xmlns:xlink\",\"http://www.w3.org/1999/xlink\");svg.__object__=obj;svg.__container__=container;container.appendChild(svg);container.__svg__=svg;container.__object__=obj;var style=getComputedStyle(container);if(style.position!=='absolute'&&style.position!=='fixed'&&style.position!=='sticky'){container.style.position='relative';}\nvar numLayers=10;for(var i=1;i<=numLayers;++i){var group=RG.SVG.create({svg:svg,type:'g',attr:{className:'background'+i}});obj.layers['background'+i]=group;svg['background'+i]=group;}\nvar group=RG.SVG.create({svg:svg,type:'g',attr:{className:'all-elements'}});container.__svg__.all=group;return svg;};RG.SVG.createDefs=function(obj)\n{if(!obj.svg.defs){var defs=RG.SVG.create({svg:obj.svg,type:'defs'});obj.svg.defs=defs;}\nreturn defs;};RG.SVG.create=function(opt)\n{var ns=\"http://www.w3.org/2000/svg\",tag=doc.createElementNS(ns,opt.type);for(var o in opt.attr){if(typeof o==='string'){var name=o;if(o==='className'){name='class';}\nif((opt.type==='a'||opt.type==='image')&&o==='xlink:href'){tag.setAttributeNS('http://www.w3.org/1999/xlink',o,String(opt.attr[o]));}else{if(RG.SVG.isNull(opt.attr[o])){opt.attr[o]='';}\ntag.setAttribute(name,String(opt.attr[o]));}}}\nfor(var o in opt.style){if(typeof o==='string'){tag.style[o]=String(opt.style[o]);}}\nif(opt.parent){opt.parent.appendChild(tag);}else{opt.svg.appendChild(tag);}\nreturn tag;};RG.SVG.getMouseXY=function(e)\n{if(!e.target){return;}\nvar el=e.target,offsetX=0,offsetY=0,x,y;if(typeof el.offsetParent!=='undefined'){do{offsetX+=el.offsetLeft;offsetY+=el.offsetTop;}while((el=el.offsetParent));}\nx=e.pageX;y=e.pageY;x-=(2*(parseInt(document.body.style.borderLeftWidth)||0));y-=(2*(parseInt(document.body.style.borderTopWidth)||0));return[x,y];};RG.SVG.drawXAxis=function(obj)\n{var prop=obj.properties;if(prop.xaxis){var y=obj.type==='hbar'?obj.height-prop.gutterBottom:obj.getYCoord(obj.scale.min<0&&obj.scale.max<0?obj.scale.max:(obj.scale.min>0&&obj.scale.max>0?obj.scale.min:0));var axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(prop.gutterLeft,y,obj.width-prop.gutterRight,y),fill:prop.xaxisColor,stroke:prop.xaxisColor,'stroke-width':typeof prop.xaxisLinewidth==='number'?prop.xaxisLinewidth:1,'shape-rendering':'crispEdges','stroke-linecap':'square'}});if(obj.type==='hbar'){var width=obj.graphWidth/obj.data.length,x=prop.gutterLeft,startY=(obj.height-prop.gutterBottom),endY=(obj.height-prop.gutterBottom)+prop.xaxisTickmarksLength;}else{var width=obj.graphWidth/obj.data.length,x=prop.gutterLeft,startY=obj.getYCoord(0)-(prop.yaxisMin<0?prop.xaxisTickmarksLength:0),endY=obj.getYCoord(0)+prop.xaxisTickmarksLength;if(obj.scale.min<0&&obj.scale.max<=0){startY=prop.gutterTop;endY=prop.gutterTop-prop.xaxisTickmarksLength;}\nif(obj.scale.min>0&&obj.scale.max>0){startY=obj.getYCoord(obj.scale.min);endY=obj.getYCoord(obj.scale.min)+prop.xaxisTickmarksLength;}}\nif(prop.xaxisTickmarks){if(prop.xaxisScale){for(var i=0;i<(typeof prop.xaxisLabelsPositionEdgeTickmarksCount==='number'?prop.xaxisLabelsPositionEdgeTickmarksCount:(obj.scale.numlabels+(prop.yaxis&&prop.xaxisMin===0?0:1)));++i){if(obj.type==='hbar'){var dataPoints=obj.data.length;}\nx=prop.gutterLeft+((i+(prop.yaxis&&prop.xaxisMin===0?1:0))*(obj.graphWidth/obj.scale.numlabels));if(typeof prop.xaxisLabelsPositionEdgeTickmarksCount==='number'){dataPoints=prop.xaxisLabelsPositionEdgeTickmarksCount;var gap=(obj.graphWidth/prop.xaxisLabelsPositionEdgeTickmarksCount);x=(gap*i)+prop.gutterLeft+gap;}\nRG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':typeof prop.xaxisLinewidth==='number'?prop.xaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});}}else{if(prop.xaxisLabelsPosition==='section'){if(obj.type==='bar'||obj.type==='waterfall'){var dataPoints=obj.data.length;}else if(obj.type==='line'){var dataPoints=obj.data[0].length;}else if(obj.type==='scatter'){var dataPoints=prop.xaxisLabels?prop.xaxisLabels.length:10;}\nif(typeof prop.xaxisLabelsPositionSectionTickmarksCount==='number'){dataPoints=prop.xaxisLabelsPositionSectionTickmarksCount;}\nfor(var i=0;i<dataPoints;++i){x=prop.gutterLeft+((i+1)*(obj.graphWidth/dataPoints));RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':typeof prop.xaxisLinewidth==='number'?prop.xaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});}}else if(prop.xaxisLabelsPosition==='edge'){if(typeof prop.xaxisLabelsPositionEdgeTickmarksCount==='number'){var len=prop.xaxisLabelsPositionEdgeTickmarksCount;}else{var len=obj.data&&obj.data[0]&&obj.data[0].length?obj.data[0].length:0;}\nfor(var i=0;i<len;++i){var gap=((obj.graphWidth)/(len-1)),x=prop.gutterLeft+((i+1)*gap);RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x+0.001,startY,x,endY),stroke:prop.xaxisColor,'stroke-width':typeof prop.xaxisLinewidth==='number'?prop.xaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});}}}\nif(prop.yaxis===false){RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(prop.gutterLeft+0.001,startY,prop.gutterLeft,endY),stroke:obj.properties.xaxisColor,'stroke-width':typeof prop.xaxisLinewidth==='number'?prop.xaxisLinewidth:1,'shape-rendering':\"crispEdges\",parent:obj.svg.all,}});}}}\nif(prop.xaxisScale){if(obj.type==='scatter'){obj.xscale=RG.SVG.getScale({object:obj,numlabels:prop.xaxisLabelsCount,unitsPre:prop.xaxisUnitsPre,unitsPost:prop.xaxisUnitsPost,max:prop.xaxisMax,min:prop.xaxisMin,point:prop.xaxisPoint,round:prop.xaxisRound,thousand:prop.xaxisThousand,decimals:prop.xaxisDecimals,strict:typeof prop.xaxisMax==='number',formatter:prop.xaxisFormatter});var segment=obj.graphWidth/prop.xaxisLabelsCount\nfor(var i=0;i<obj.xscale.labels.length;++i){var x=prop.gutterLeft+(segment*i)+segment+prop.xaxisLabelsOffsetx;var y=(obj.height-prop.gutterBottom)+(prop.xaxis?prop.xaxisTickmarksLength+6:10)+(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety;RG.SVG.text({object:obj,parent:obj.svg.all,text:obj.xscale.labels[i],x:x,y:y,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.xaxisTextBold||prop.textBold,italic:prop.xaxisTextItalic||prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}\nif(prop.xaxisLabelsCount>0){var y=obj.height-prop.gutterBottom+prop.xaxisLabelsOffsety+(prop.xaxis?prop.xaxisTickmarksLength+6:10),str=RG.SVG.numberFormat({object:obj,num:prop.xaxisMin.toFixed(prop.xaxisDecimals),prepend:prop.xaxisUnitsPre,append:prop.xaxisUnitsPost,point:prop.xaxisPoint,thousand:prop.xaxisThousand,formatter:prop.xaxisFormatter});var text=RG.SVG.text({object:obj,parent:obj.svg.all,text:typeof prop.xaxisFormatter==='function'?(prop.xaxisFormatter)(this,prop.xaxisMin):str,x:prop.gutterLeft+prop.xaxisLabelsOffsetx,y:y,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.xaxisTextBold||prop.textBold,italic:prop.xaxisTextItalic||prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}}else{var segment=obj.graphWidth/prop.xaxisLabelsCount,scale=obj.scale;for(var i=0;i<scale.labels.length;++i){var x=prop.gutterLeft+(segment*i)+segment+prop.xaxisLabelsOffsetx;var y=(obj.height-prop.gutterBottom)+(prop.xaxis?prop.xaxisTickmarksLength+6:10)+(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety;RG.SVG.text({object:obj,parent:obj.svg.all,text:obj.scale.labels[i],x:x,y:y,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.xaxisTextBold||prop.textBold,italic:prop.xaxisTextItalic||prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}\nif(prop.xaxisLabelsCount>0){var y=obj.height-prop.gutterBottom+prop.xaxisLabelsOffsety+(prop.xaxis?prop.xaxisTickmarksLength+6:10),str=RG.SVG.numberFormat({object:obj,num:prop.xaxisMin.toFixed(prop.xaxisDecimals),prepend:prop.xaxisUnitsPre,append:prop.xaxisUnitsPost,point:prop.xaxisPoint,thousand:prop.xaxisThousand,formatter:prop.xaxisFormatter});var text=RG.SVG.text({object:obj,parent:obj.svg.all,text:typeof prop.xaxisFormatter==='function'?(prop.xaxisFormatter)(this,prop.xaxisMin):str,x:prop.gutterLeft+prop.xaxisLabelsOffsetx,y:y,halign:'center',valign:'top',tag:'labels.xaxis',font:prop.xaxisTextFont||prop.textFont,size:prop.xaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.xaxisTextBold||prop.textBold,italic:prop.xaxisTextItalic||prop.textItalic,color:prop.xaxisTextColor||prop.textColor});}}}else{if(typeof prop.xaxisLabels==='object'&&!RG.SVG.isNull(prop.xaxisLabels)){var angle=prop.xaxisTextAngle;if(prop.xaxisLabelsPosition==='section'){var segment=(obj.width-prop.gutterLeft-prop.gutterRight)/prop.xaxisLabels.length;for(var i=0;i<prop.xaxisLabels.length;++i){var x=prop.gutterLeft+(segment/2)+(i*segment);if(obj.scale.max<=0&&obj.scale.min<obj.scale.max){var y=prop.gutterTop-(RG.SVG.ISFF?5:10)-(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety;var valign='bottom';}else{var y=obj.height-prop.gutterBottom+(RG.SVG.ISFF?5:10)+(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety;var valign='top';}\nRG.SVG.text({object:obj,parent:obj.svg.all,text:prop.xaxisLabels[i],x:x+prop.xaxisLabelsOffsetx,y:y,valign:(typeof angle==='number'&&angle)?'center':valign,halign:(typeof angle==='number'&&angle)?'right':'center',angle:angle,tag:'labels.xaxis',size:prop.xaxisTextSize||prop.textSize,italic:prop.xaxisTextItalic||prop.textItalic,font:prop.xaxisTextFont||prop.textFont,bold:prop.xaxisTextBold||prop.textBold,color:prop.xaxisTextColor||prop.textColor});}}else if(prop.xaxisLabelsPosition==='edge'){if(obj.type==='line'){var hmargin=prop.hmargin;}else{var hmargin=0;}\nvar segment=(obj.graphWidth-hmargin-hmargin)/(prop.xaxisLabels.length-1);for(var i=0;i<prop.xaxisLabels.length;++i){var x=prop.gutterLeft+(i*segment)+hmargin;if(obj.scale.max<=0&&obj.scale.min<0){valign='bottom';y=prop.gutterTop-(RG.SVG.ISFF?5:10)-(prop.xaxisTickmarksLength-5)-(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety}else{valign='top';y=obj.height-prop.gutterBottom+(RG.SVG.ISFF?5:10)+(prop.xaxisTickmarksLength-5)+(prop.xaxisLinewidth||1)+prop.xaxisLabelsOffsety;}\nRG.SVG.text({object:obj,parent:obj.svg.all,text:prop.xaxisLabels[i],x:x+prop.xaxisLabelsOffsetx,y:y,valign:(typeof angle==='number'&&angle)?'center':valign,halign:(typeof angle==='number'&&angle)?'right':'center',angle:angle,tag:'labels.xaxis',size:prop.xaxisTextSize||prop.textSize,italic:prop.xaxisTextItalic||prop.textItalic,font:prop.xaxisTextFont||prop.textFont,bold:prop.xaxisTextBold||prop.textBold,color:prop.xaxisTextColor||prop.textColor});}}}}};RG.SVG.drawYAxis=function(obj)\n{var prop=obj.properties;if(prop.yaxis){if(obj.type==='hbar'){var x=obj.getXCoord(prop.xaxisMin>0?prop.xaxisMin:0);if(prop.xaxisMin<0&&prop.xaxisMax<=0){x=obj.getXCoord(prop.xaxisMax);}}else{var x=prop.gutterLeft;}\nvar axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(x,prop.gutterTop,x,obj.height-prop.gutterBottom),stroke:prop.yaxisColor,fill:prop.yaxisColor,'stroke-width':typeof prop.yaxisLinewidth==='number'?prop.yaxisLinewidth:1,'shape-rendering':\"crispEdges\",'stroke-linecap':'square'}});if(obj.type==='hbar'){var height=(obj.graphHeight-prop.vmarginTop-prop.vmarginBottom)/prop.yaxisLabels.length,y=prop.gutterTop+prop.vmarginTop,len=prop.yaxisLabels.length,startX=obj.getXCoord(0)+(prop.xaxisMin<0?prop.yaxisTickmarksLength:0),endX=obj.getXCoord(0)-prop.yaxisTickmarksLength;if(prop.xaxisMin<0&&prop.xaxisMax<=0){startX=obj.getXCoord(prop.xaxisMax);endX=obj.getXCoord(prop.xaxisMax)+5;}\nif(typeof prop.yaxisLabelsPositionSectionTickmarksCount==='number'){len=prop.yaxisLabelsPositionSectionTickmarksCount;height=(obj.graphHeight-prop.vmarginTop-prop.vmarginBottom)/len;}\nif(prop.yaxisTickmarks){for(var i=0;i<len;++i){var axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX,y,endX,y+0.001),stroke:prop.yaxisColor,'stroke-width':typeof prop.yaxisLinewidth==='number'?prop.yaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});y+=height;}\nif(prop.xaxis===false){if(obj.type==='hbar'&&prop.xaxisMin<=0&&prop.xaxisMax<0){var startX=obj.getXCoord(prop.xaxisMax);var endX=obj.getXCoord(prop.xaxisMax)+prop.yaxisTickmarksLength;}else{var startX=obj.getXCoord(0)-prop.yaxisTickmarksLength;var endX=obj.getXCoord(0)+(prop.xaxisMin<0?prop.yaxisTickmarksLength:0);}\nvar axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX,ma.round(obj.height-prop.gutterBottom-parseFloat(prop.vmarginBottom)),endX,ma.round(obj.height-prop.gutterBottom-parseFloat(prop.vmarginBottom))),stroke:obj.properties.yaxisColor,'stroke-width':typeof prop.yaxisLinewidth==='number'?prop.yaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});}}}else{var height=obj.graphHeight/prop.yaxisLabelsCount,y=prop.gutterTop,len=prop.yaxisLabelsCount,startX=prop.gutterLeft,endX=prop.gutterLeft-prop.yaxisTickmarksLength;if(typeof prop.yaxisLabelsPositionEdgeTickmarksCount==='number'){len=prop.yaxisLabelsPositionEdgeTickmarksCount;height=obj.graphHeight/len;}\nif(prop.yaxisTickmarks){for(var i=0;i<len;++i){var axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(startX,y,endX,y),stroke:prop.yaxisColor,'stroke-width':typeof prop.yaxisLinewidth==='number'?prop.yaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});y+=height;}\nif((prop.yaxisMin!==0||prop.xaxis===false)&&!(obj.scale.min>0&&obj.scale.max>0)){var axis=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{d:'M{1} {2} L{3} {4}'.format(prop.gutterLeft-prop.yaxisTickmarksLength,obj.height-prop.gutterBottom,prop.gutterLeft,obj.height-prop.gutterBottom-0.001),stroke:prop.yaxisColor,'stroke-width':typeof prop.yaxisLinewidth==='number'?prop.yaxisLinewidth:1,'shape-rendering':\"crispEdges\"}});}}}}\nif(prop.yaxisScale){var segment=(obj.height-prop.gutterTop-prop.gutterBottom)/prop.yaxisLabelsCount;for(var i=0;i<obj.scale.labels.length;++i){var y=obj.height-prop.gutterBottom-(segment*i)-segment;RG.SVG.text({object:obj,parent:obj.svg.all,text:obj.scale.labels[i],x:prop.gutterLeft-7-(prop.yaxis?(prop.yaxisTickmarksLength-3):0)+prop.yaxisLabelsOffsetx,y:y+prop.yaxisLabelsOffsety,halign:prop.yaxisLabelsHalign||'right',valign:prop.yaxisLabelsValign||'center',tag:'labels.yaxis',font:prop.yaxisTextFont||prop.textFont,size:prop.yaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.yaxisTextBold||prop.textBold,italic:prop.yaxisTextItalic||prop.textItalic,color:prop.yaxisTextColor||prop.textColor});}\nvar y=obj.height-prop.gutterBottom,str=(prop.yaxisUnitsPre+prop.yaxisMin.toFixed(prop.yaxisDecimals).replace(/\\./,prop.yaxisPoint)+prop.yaxisUnitsPost);var text=RG.SVG.text({object:obj,parent:obj.svg.all,text:typeof prop.yaxisFormatter==='function'?(prop.yaxisFormatter)(this,prop.yaxisMin):str,x:prop.gutterLeft-7-(prop.yaxis?(prop.yaxisTickmarksLength-3):0)+prop.yaxisLabelsOffsetx,y:y+prop.yaxisLabelsOffsety,halign:'right',valign:'center',tag:'labels.yaxis',font:prop.yaxisTextFont||prop.textFont,size:prop.yaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:prop.yaxisTextBold||prop.textBold,italic:prop.yaxisTextItalic||prop.textItalic,color:prop.yaxisTextColor||prop.textColor});}else if(prop.yaxisLabels&&prop.yaxisLabels.length){for(var i=0;i<prop.yaxisLabels.length;++i){var segment=(obj.graphHeight-(prop.vmarginTop||0)-(prop.vmarginBottom||0))/prop.yaxisLabels.length,y=prop.gutterTop+(prop.vmarginTop||0)+(segment*i)+(segment/2)+prop.yaxisLabelsOffsety,x=prop.gutterLeft-7-(prop.yaxisLinewidth||1)+prop.yaxisLabelsOffsetx,halign='right';if(obj.type==='hbar'&&obj.scale.min<obj.scale.max&&obj.scale.max<=0){halign='left';x=obj.width-prop.gutterRight+7+prop.yaxisLabelsOffsetx;}else if(obj.type==='hbar'&&!prop.yaxisLabelsSpecific){var segment=(obj.graphHeight-(prop.vmarginTop||0)-(prop.vmarginBottom||0))/(prop.yaxisLabels.length);y=prop.gutterTop+(prop.vmarginTop||0)+(segment*i)+(segment/2)+prop.yaxisLabelsOffsety;}else{var segment=(obj.graphHeight-(prop.vmarginTop||0)-(prop.vmarginBottom||0))/(prop.yaxisLabels.length-1);y=obj.height-prop.gutterBottom-(segment*i)+prop.yaxisLabelsOffsety;}\nvar text=RG.SVG.text({object:obj,parent:obj.svg.all,text:prop.yaxisLabels[i]?prop.yaxisLabels[i]:'',x:x,y:y,halign:halign,valign:'center',tag:'labels.yaxis',font:prop.yaxisTextFont||prop.textFont,size:prop.yaxisTextSize||(typeof prop.textSize==='number'?prop.textSize+'pt':prop.textSize),bold:typeof prop.yaxisTextBold==='boolean'?prop.yaxisTextBold:prop.textBold,italic:typeof prop.yaxisTextItalic==='boolean'?prop.yaxisTextItalic:prop.textItalic,color:prop.yaxisTextColor||prop.textColor});}}};RG.SVG.drawBackground=function(obj)\n{var prop=obj.properties;if(typeof prop.variant3dOffsetx!=='number')prop.variant3dOffsetx=0;if(typeof prop.variant3dOffsety!=='number')prop.variant3dOffsety=0;if(prop.backgroundColor){RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'rect',attr:{x:-1+prop.variant3dOffsetx+prop.gutterLeft,y:-1-prop.variant3dOffsety+prop.gutterTop,width:parseFloat(obj.svg.getAttribute('width'))+2-prop.gutterLeft-prop.gutterRight,height:parseFloat(obj.svg.getAttribute('height'))+2-prop.gutterTop-prop.gutterBottom,fill:prop.backgroundColor}});}\nif(prop.backgroundImage){var attr={'xlink:href':prop.backgroundImage,preserveAspectRatio:prop.backgroundImageAspect||'none',x:prop.gutterLeft,y:prop.gutterTop};if(prop.backgroundImageStretch){attr.x=prop.gutterLeft+prop.variant3dOffsetx;attr.y=prop.gutterTop+prop.variant3dOffsety;attr.width=obj.width-prop.gutterLeft-prop.gutterRight;attr.height=obj.height-prop.gutterTop-prop.gutterBottom;}else{if(typeof prop.backgroundImageX==='number'){attr.x=prop.backgroundImageX+prop.variant3dOffsetx;}else{attr.x=prop.gutterLeft+prop.variant3dOffsetx;}\nif(typeof prop.backgroundImageY==='number'){attr.y=prop.backgroundImageY+prop.variant3dOffsety;}else{attr.y=prop.gutterTop+prop.variant3dOffsety;}\nif(typeof prop.backgroundImageW==='number'){attr.width=prop.backgroundImageW;}\nif(typeof prop.backgroundImageH==='number'){attr.height=prop.backgroundImageH;}}\nif(prop.variant==='3d'){attr.x+=prop.variant3dOffsetx;attr.y-=prop.variant3dOffsety;}\nvar img=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'image',attr:attr,style:{opacity:typeof prop.backgroundImageOpacity==='number'?prop.backgroundImageOpacity:1}});if(!prop.backgroundImageStretch){var img2=new Image();img2.src=prop.backgroundImage;img2.onload=function()\n{img.setAttribute('width',typeof prop.backgroundImageW==='number'?prop.backgroundImageW:img2.width);img.setAttribute('height',typeof prop.backgroundImageH==='number'?prop.backgroundImageH:img2.height);};}}\nif(prop.backgroundGrid){var parts=[];if(prop.backgroundGridHlines){if(typeof prop.backgroundGridHlinesCount==='number'){var count=prop.backgroundGridHlinesCount;}else if(obj.type==='hbar'||obj.type==='bipolar'){if(typeof prop.yaxisLabels==='object'&&!RG.SVG.isNull(prop.yaxisLabels)&&prop.yaxisLabels.length){var count=prop.yaxisLabels.length;}else if(obj.type==='hbar'){var count=obj.data.length;}else if(obj.type==='bipolar'){var count=obj.left.length;}}else{var count=prop.yaxisLabelsCount||5;}\nfor(var i=0;i<=count;++i){parts.push('M{1} {2} L{3} {4}'.format(prop.gutterLeft+prop.variant3dOffsetx,prop.gutterTop+(obj.graphHeight/count)*i-prop.variant3dOffsety,obj.width-prop.gutterRight+prop.variant3dOffsetx,prop.gutterTop+(obj.graphHeight/count)*i-prop.variant3dOffsety));}\nparts.push('M{1} {2} L{3} {4}'.format(prop.gutterLeft+prop.variant3dOffsetx,obj.height-prop.gutterBottom-prop.variant3dOffsety,obj.width-prop.gutterRight+prop.variant3dOffsetx,obj.height-prop.gutterBottom-prop.variant3dOffsety));}\nif(prop.backgroundGridVlines){if(obj.type==='line'&&RG.SVG.isArray(obj.data[0])){var len=obj.data[0].length;}else if(obj.type==='hbar'){var len=prop.xaxisLabelsCount||10;}else if(obj.type==='bipolar'){var len=prop.xaxisLabelsCount||10;}else if(obj.type==='scatter'){var len=(prop.xaxisLabels&&prop.xaxisLabels.length)||10;}else if(obj.type==='waterfall'){var len=obj.data[0].length;}else{var len=obj.data.length;}\nvar count=typeof prop.backgroundGridVlinesCount==='number'?prop.backgroundGridVlinesCount:len;if(prop.xaxisLabelsPosition==='edge'){count--;}\nfor(var i=0;i<=count;++i){parts.push('M{1} {2} L{3} {4}'.format(prop.gutterLeft+((obj.graphWidth/count)*i)+prop.variant3dOffsetx,prop.gutterTop-prop.variant3dOffsety,prop.gutterLeft+((obj.graphWidth/count)*i)+prop.variant3dOffsetx,obj.height-prop.gutterBottom-prop.variant3dOffsety));}}\nif(prop.backgroundGridBorder){parts.push('M{1} {2} L{3} {4} L{5} {6} L{7} {8} z'.format(prop.gutterLeft+prop.variant3dOffsetx,prop.gutterTop-prop.variant3dOffsety,obj.width-prop.gutterRight+prop.variant3dOffsetx,prop.gutterTop-prop.variant3dOffsety,obj.width-prop.gutterRight+prop.variant3dOffsetx,obj.height-prop.gutterBottom-prop.variant3dOffsety,prop.gutterLeft+prop.variant3dOffsetx,obj.height-prop.gutterBottom-prop.variant3dOffsety));}\nvar dasharray;if(prop.backgroundGridDashed){dasharray=[3,5];}else if(prop.backgroundGridDotted){dasharray=[1,3];}else if(prop.backgroundGridDashArray){dasharray=prop.backgroundGridDashArray;}else{dasharray='';}\nvar grid=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'path',attr:{className:'rgraph_background_grid',d:parts.join(' '),stroke:prop.backgroundGridColor,fill:'rgba(0,0,0,0)','stroke-width':prop.backgroundGridLinewidth,'shape-rendering':\"crispEdges\",'stroke-dasharray':dasharray},style:{pointerEvents:'none'}});}\nif(obj.type!=='bipolar'){RG.SVG.drawTitle(obj);}};RG.SVG.isNull=function(arg)\n{if(arg==null||typeof arg==='object'&&!arg){return true;}\nreturn false;};RG.SVG.getScale=function(opt)\n{var obj=opt.object,prop=obj.properties,numlabels=opt.numlabels,unitsPre=opt.unitsPre,unitsPost=opt.unitsPost,max=Number(opt.max),min=Number(opt.min),strict=opt.strict,decimals=Number(opt.decimals),point=opt.point,thousand=opt.thousand,originalMax=max,round=opt.round,scale={max:1,labels:[],values:[]},formatter=opt.formatter;if(max===0&&min===0){var max=1;for(var i=0;i<numlabels;++i){var label=((((max-min)/numlabels)*(i+1))+min).toFixed(decimals);scale.labels.push(unitsPre+label+unitsPost);scale.values.push(parseFloat(label))}}else if(max<=1&&!strict){var arr=[1,0.5,0.10,0.05,0.010,0.005,0.0010,0.0005,0.00010,0.00005,0.000010,0.000005,0.0000010,0.0000005,0.00000010,0.00000005,0.000000010,0.000000005,0.0000000010,0.0000000005,0.00000000010,0.00000000005,0.000000000010,0.000000000005,0.0000000000010,0.0000000000005],vals=[];for(var i=0;i<arr.length;++i){if(max>arr[i]){i--;break;}}\nscale.max=arr[i]\nscale.labels=[];scale.values=[];for(var j=0;j<numlabels;++j){var value=((((arr[i]-min)/numlabels)*(j+1))+min).toFixed(decimals);scale.values.push(value);scale.labels.push(RG.SVG.numberFormat({object:obj,num:value,prepend:unitsPre,append:unitsPost,point:prop.yaxisPoint,thousand:prop.yaxisThousand,formatter:formatter}));}}else if(!strict){max=ma.ceil(max);var interval=ma.pow(10,ma.max(1,Number(String(Number(max)-Number(min)).length-1)));var topValue=interval;while(topValue<max){topValue+=(interval/2);}\nif(Number(originalMax)>Number(topValue)){topValue+=(interval/2);}\nif(max<=10){topValue=(Number(originalMax)<=5?5:10);}\nif(obj&&typeof(round)=='boolean'&&round){topValue=10*interval;}\nscale.max=topValue;for(var i=0;i<numlabels;++i){var label=RG.SVG.numberFormat({object:obj,num:((((i+1)/numlabels)*(topValue-min))+min).toFixed(decimals),prepend:unitsPre,append:unitsPost,point:point,thousand:thousand,formatter:formatter});scale.labels.push(label);scale.values.push(((((i+1)/numlabels)*(topValue-min))+min).toFixed(decimals));}}else if(typeof max==='number'&&strict){for(var i=0;i<numlabels;++i){scale.labels.push(RG.SVG.numberFormat({object:obj,formatter:formatter,num:((((i+1)/numlabels)*(max-min))+min).toFixed(decimals),prepend:unitsPre,append:unitsPost,point:point,thousand:thousand}));scale.values.push(((((i+1)/numlabels)*(max-min))+min).toFixed(decimals));}\nscale.max=max;}\nscale.unitsPre=unitsPre;scale.unitsPost=unitsPost;scale.point=point;scale.decimals=decimals;scale.thousand=thousand;scale.numlabels=numlabels;scale.round=Boolean(round);scale.min=min;for(var i=0;i<scale.values.length;++i){scale.values[i]=parseFloat(scale.values[i]);}\nreturn scale;};RG.SVG.arrayFill=RG.SVG.arrayPad=function(opt)\n{var arr=opt.array,len=opt.length,value=(typeof opt.value==='undefined'?null:opt.value);if(arr.length<len){for(var i=arr.length;i<len;i+=1){arr[i]=value;}}\nreturn arr;};RG.SVG.arraySum=function(arr)\n{if(typeof arr==='number'){return arr;}\nif(RG.SVG.isNull(arr)){return 0;}\nvar i,sum,len=arr.length;for(i=0,sum=0;i<len;sum+=arr[i++]);return sum;};RG.SVG.arrayMax=function(arr)\n{var max=null\nif(typeof arr==='number'){return arr;}\nif(RG.SVG.isNull(arr)){return 0;}\nfor(var i=0,len=arr.length;i<len;++i){if(typeof arr[i]==='number'){var val=arguments[1]?ma.abs(arr[i]):arr[i];if(typeof max==='number'){max=ma.max(max,val);}else{max=val;}}}\nreturn max;};RG.SVG.arrayMin=function(arr)\n{var max=null,min=null,ma=Math;if(typeof arr==='number'){return arr;}\nif(RG.SVG.isNull(arr)){return 0;}\nfor(var i=0,len=arr.length;i<len;++i){if(typeof arr[i]==='number'){var val=arguments[1]?ma.abs(arr[i]):arr[i];if(typeof min==='number'){min=ma.min(min,val);}else{min=val;}}}\nreturn min;};RG.SVG.arrayPad=function(arr,len)\n{if(arr.length<len){var val=arguments[2]?arguments[2]:null;for(var i=arr.length;i<len;i+=1){arr[i]=val;}}\nreturn arr;};RG.SVG.arraySum=function(arr)\n{if(typeof arr==='number'){return arr;}\nif(RG.SVG.isNull(arr)){return 0;}\nvar i,sum,len=arr.length;for(i=0,sum=0;i<len;sum+=arr[i++]);return sum;};RG.SVG.arrayLinearize=function()\n{var arr=[],args=arguments\nfor(var i=0,len=args.length;i<len;++i){if(typeof args[i]==='object'&&args[i]){for(var j=0,len2=args[i].length;j<len2;++j){var sub=RG.SVG.arrayLinearize(args[i][j]);for(var k=0,len3=sub.length;k<len3;++k){arr.push(sub[k]);}}}else{arr.push(args[i]);}}\nreturn arr;};RG.SVG.arrayShift=function(arr)\n{var ret=[];for(var i=1,len=arr.length;i<len;++i){ret.push(arr[i]);}\nreturn ret;};RG.SVG.arrayReverse=function(arr)\n{if(!arr){return;}\nvar newarr=[];for(var i=arr.length-1;i>=0;i-=1){newarr.push(arr[i]);}\nreturn newarr;};RG.SVG.arrayClone=function(obj)\n{if(obj===null||typeof obj!=='object'){return obj;}\nif(RG.SVG.isArray(obj)){var temp=[];for(var i=0,len=obj.length;i<len;++i){if(typeof obj[i]==='number'){temp[i]=(function(arg){return Number(arg);})(obj[i]);}else if(typeof obj[i]==='string'){temp[i]=(function(arg){return String(arg);})(obj[i]);}else if(typeof obj[i]==='function'){temp[i]=obj[i];}else{temp[i]=RG.SVG.arrayClone(obj[i]);}}}else if(typeof obj==='object'){var temp={};for(var i in obj){if(typeof i==='string'){temp[i]=obj[i];}}}\nreturn temp;};RG.SVG.arrayInvert=function(arr)\n{for(var i=0,len=arr.length;i<len;++i){arr[i]=!arr[i];}\nreturn arr;};RG.SVG.arrayTrim=function(arr)\n{var out=[],content=false;for(var i=0;i<arr.length;i++){if(arr[i]){content=true;}\nif(content){out.push(arr[i]);}}\nout=RG.SVG.arrayReverse(out);var out2=[],content=false;for(var i=0;i<out.length;i++){if(out[i]){content=true;}\nif(content){out2.push(out[i]);}}\nout2=RG.SVG.arrayReverse(out2);return out2;};RG.SVG.isArray=function(obj)\n{if(obj&&obj.constructor){var pos=obj.constructor.toString().indexOf('Array');}else{return false;}\nreturn obj!=null&&typeof pos==='number'&&pos>0&&pos<20;};RG.SVG.abs=function(value)\n{if(typeof value==='string'){value=parseFloat(value)||0;}\nif(typeof value==='number'){return ma.abs(value);}\nif(typeof value==='object'){for(i in value){if(typeof i==='string'||typeof i==='number'||typeof i==='object'){value[i]=RG.SVG.abs(value[i]);}}\nreturn value;}\nreturn 0;};RG.SVG.numberFormat=function(opt)\n{var obj=opt.object,prepend=opt.prepend?String(opt.prepend):'',append=opt.append?String(opt.append):'',output='',decimal_seperator=typeof opt.point==='string'?opt.point:'.',thousand_seperator=typeof opt.thousand==='string'?opt.thousand:',',num=opt.num\ndecimals_trim=opt.decimals_trim;RegExp.$1='';if(typeof opt.formatter==='function'){return opt.formatter(obj,num);}\nif(String(num).indexOf('e')>0){return String(prepend+String(num)+append);}\nnum=String(num);if(num.indexOf('.')>0){var tmp=num;num=num.replace(/\\.(.*)/,'');decimal=tmp.replace(/(.*)\\.(.*)/,'$2');}else{decimal='';}\nvar seperator=thousand_seperator;var foundPoint;for(i=(num.length-1),j=0;i>=0;j++,i--){var character=num.charAt(i);if(j%3==0&&j!=0){output+=seperator;}\noutput+=character;}\nvar rev=output;output='';for(i=(rev.length-1);i>=0;i--){output+=rev.charAt(i);}\nif(output.indexOf('-'+thousand_seperator)==0){output='-'+output.substr(('-'+thousand_seperator).length);}\nif(decimal.length){output=output+decimal_seperator+decimal;decimal='';RegExp.$1='';}\nif(decimals_trim){output=output.replace(/0+$/,'');output=output.replace(/\\.$/,'');}\nif(output.charAt(0)=='-'){output=output.replace(/-/,'');prepend='-'+prepend;}\nreturn prepend+output+append;};RG.SVG.text=function(opt)\n{var obj=opt.object,parent=opt.parent||opt.object.svg.all,size=typeof opt.size==='number'?opt.size+'pt':(typeof opt.size==='string'?opt.size.replace(/pt$/,''):12)+'pt',bold=opt.bold?'bold':'normal',font=opt.font?opt.font:'sans-serif',italic=opt.italic?'italic':'normal',halign=opt.halign,valign=opt.valign,str=opt.text,x=opt.x,y=opt.y,color=opt.color?opt.color:'black',background=opt.background||null,backgroundRounded=opt.backgroundRounded||0,padding=opt.padding||0,link=opt.link||'',linkTarget=opt.linkTarget||'_blank',events=(opt.events===false?false:true),angle=opt.angle;if(typeof str==='number'){str=String(str);}\nif(RG.SVG.isNull(str)){str='';}\nif(str&&str.substr(0,2)=='\\r\\n'||str.substr(0,1)==='\\n'){str=\"\\u00A0\"+str;}\nif(halign==='right'){halign='end';}else if(halign==='center'||halign==='middle'){halign='middle';}else{halign='start';}\nif(valign==='top'){valign='hanging';}else if(valign==='center'||valign==='middle'){valign='central';valign='middle';}else{valign='bottom';}\nif(link){var a=RGraph.SVG.create({svg:obj.svg,type:'a',parent:parent,attr:{'xlink:href':link,target:linkTarget}});}\nif(str&&str.indexOf&&str.indexOf(\"\\n\")===-1){var text=RG.SVG.create({svg:obj.svg,parent:link?a:opt.parent,type:'text',attr:{tag:opt.tag?opt.tag:'',fill:color,x:x,y:y,'font-size':size,'font-weight':bold,'font-family':font,'font-style':italic,'text-anchor':halign,'dominant-baseline':valign}});var textNode=document.createTextNode(str);text.appendChild(textNode);if(!events){text.style.pointerEvents='none';}}else if(str&&str.indexOf){var dimensions=RG.SVG.measureText({text:'My',bold:bold,font:font,size:size});var lineHeight=dimensions[1];str=str.split(/\\r?\\n/);if(valign==='bottom'){y-=str.length*lineHeight;}\nif(valign==='center'||valign==='middle'){y-=(str.length*lineHeight)/2;}\nvar text=RG.SVG.create({svg:obj.svg,parent:link?a:opt.parent,type:'text',attr:{tag:opt.tag?opt.tag:'',fill:color,x:x,y:y,'font-size':size,'font-weight':bold,'font-family':font,'font-style':italic,'text-anchor':halign,'dominant-baseline':valign}});if(!events){text.style.pointerEvents='none';}\nfor(var i=0;i<str.length;++i){var tspan=RG.SVG.create({svg:obj.svg,parent:text,type:'tspan',attr:{x:x,dy:dimensions?(dimensions[1]*(i?1:0))+3:0}});var textNode=document.createTextNode(str[i]);tspan.appendChild(textNode);if(!events){tspan.style.pointerEvents='none';}\nvar dimensions=RG.SVG.measureText({text:str[i],bold:bold,font:font,size:parseInt(size)});}}\nif(typeof angle==='number'&&angle&&text){text.setAttribute('x',0);text.setAttribute('y',0);text.setAttribute('transform','translate({1} {2}) rotate({3})'.format(x,y,-1*angle));}\nif(typeof background==='string'){var parent=link?a:parent;var bbox=text.getBBox(),rect=RG.SVG.create({svg:obj.svg,parent:parent,type:'rect',attr:{x:bbox.x-padding,y:bbox.y-padding,width:bbox.width+(padding*2),height:bbox.height+(padding*2),fill:background,rx:backgroundRounded,ry:backgroundRounded}});if(!events){rect.style.pointerEvents='none';}\ntext.parentNode.insertBefore(rect,text);}\nif(RG.SVG.ISIE&&(valign==='hanging')&&text){text.setAttribute('y',y+(text.scrollHeight/2));}else if(RG.SVG.ISIE&&valign==='middle'){text.setAttribute('y',y+(text.scrollHeight/3));}\nif(RG.SVG.ISFF&&text){Y=y+(text.scrollHeight/3);}\nreturn text;};RG.SVG.text.find=function(opt)\n{if(typeof opt.object==='object'&&opt.object.isRGraph){var svg=opt.object.svg;}else if(typeof opt.svg==='object'&&opt.svg.all){var svg=opt.svg;}\nvar nodes=svg.getElementsByTagName('text');var found=[];for(var i=0,len=nodes.length;i<len;++i){var text=false,tag=false;if(typeof opt.text==='string'&&nodes[i].innerHTML===opt.text){text=true;}else if(typeof opt.text==='object'&&nodes[i].innerHTML.match(opt.text)){text=true;}else if(typeof opt.text==='undefined'){text=true;}\nif(typeof opt.tag==='string'&&nodes[i].getAttribute('tag')===opt.tag){tag=true;}else if(typeof opt.tag==='object'&&nodes[i].getAttribute('tag').match(opt.tag)){tag=true;}else if(typeof opt.tag==='undefined'){tag=true;}\nif(text===true&&tag===true){found.push(nodes[i])}}\nreturn found;};RG.SVG.createUID=function()\n{return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c)\n{var r=ma.random()*16|0,v=c=='x'?r:(r&0x3|0x8);return v.toString(16);});};RG.SVG.isFixed=function(svg)\n{var obj=svg.parentNode,i=0;while(obj&&obj.tagName.toLowerCase()!='body'&&i<99){if(obj.style.position==='fixed'){return obj;}\nobj=obj.offsetParent;}\nreturn false;};RG.SVG.REG.set=function(name,value)\n{RG.SVG.REG.store[name]=value;return value;};RG.SVG.REG.get=function(name)\n{return RG.SVG.REG.store[name];};RG.SVG.trim=function(str)\n{return RG.SVG.ltrim(RG.SVG.rtrim(str));};RG.SVG.ltrim=function(str)\n{return str.replace(/^(\\s|\\0)+/,'');};RG.SVG.rtrim=function(str)\n{return str.replace(/(\\s|\\0)+$/,'');};RG.SVG.hideTooltip=function()\n{var tooltip=RG.SVG.REG.get('tooltip');if(tooltip&&tooltip.parentNode){tooltip.parentNode.removeChild(tooltip);tooltip.style.display='none';tooltip.style.visibility='hidden';RG.SVG.REG.set('tooltip',null);}\nif(tooltip&&tooltip.__object__){RG.SVG.removeHighlight(tooltip.__object__);}};RG.SVG.setShadow=function(options)\n{var obj=options.object,offsetx=options.offsetx||0,offsety=options.offsety||0,blur=options.blur||0,opacity=options.opacity||0,id=options.id;var filter=RG.SVG.create({svg:obj.svg,parent:obj.svg.defs,type:'filter',attr:{id:id,width:\"130%\",height:\"130%\"}});RG.SVG.create({svg:obj.svg,parent:filter,type:'feOffset',attr:{result:'offOut','in':'SourceGraphic',dx:offsetx,dy:offsety}});RG.SVG.create({svg:obj.svg,parent:filter,type:'feColorMatrix',attr:{result:'matrixOut','in':'offOut',type:'matrix',values:'0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {1} 0'.format(opacity)}});RG.SVG.create({svg:obj.svg,parent:filter,type:'feGaussianBlur',attr:{result:'blurOut','in':'matrixOut',stdDeviation:blur}});RG.SVG.create({svg:obj.svg,parent:filter,type:'feBlend',attr:{'in':'SourceGraphic','in2':'blurOut',mode:'normal'}});};RG.SVG.sequentialIndexToGrouped=function(index,data)\n{var group=0,grouped_index=0;while(--index>=0){if(RG.SVG.isNull(data[group])){group++;grouped_index=0;continue;}\nif(typeof data[group]=='number'){group++\ngrouped_index=0;continue;}\ngrouped_index++;if(grouped_index>=data[group].length){group++;grouped_index=0;}}\nreturn[group,grouped_index];};RG.SVG.groupedIndexToSequential=function(opt)\n{var dataset=opt.dataset,index=opt.index,obj=opt.object;for(var i=0,seq=0;i<=dataset;++i){for(var j=0;j<obj.data[dataset].length;++j){if(i===dataset&&j===index){return seq;}\nseq++;}}\nreturn seq;};RG.SVG.arrayLinearize=function()\n{var arr=[],args=arguments\nfor(var i=0,len=args.length;i<len;++i){if(typeof args[i]==='object'&&args[i]){for(var j=0,len2=args[i].length;j<len2;++j){var sub=RG.array_linearize(args[i][j]);for(var k=0,len3=sub.length;k<len3;++k){arr.push(sub[k]);}}}else{arr.push(args[i]);}}\nreturn arr;};RG.SVG.TRIG.toCartesian=function(options)\n{return{x:options.cx+(options.r*ma.cos(options.angle)),y:options.cy+(options.r*ma.sin(options.angle))};};RG.SVG.TRIG.getHypLength=function(opt)\n{var h=Math.abs(opt.x2-opt.x1)\nv=Math.abs(opt.y2-opt.y1),r=Math.sqrt((h*h)\n+(v*v));return r;};RG.SVG.TRIG.getAngleByXY=function(opt)\n{var cx=opt.cx,cy=opt.cy,x=opt.x,y=opt.y;var angle=ma.atan((y-cy)/(x-cx));if(x>=cx&&y>=cy){angle+=RG.SVG.TRIG.HALFPI;}else if(x>=cx&&y<cy){angle=angle+RG.SVG.TRIG.HALFPI;}else if(x<cx&&y<cy){angle=angle+RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI;}else{angle=angle+RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI;}\nreturn angle;};RG.SVG.TRIG.getArcPath=function(options)\n{options.start-=1.57;options.end-=1.57;var start=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.start});var end=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.end});var diff=options.end-options.start;var largeArc='0';var sweep='0';if(options.anticlockwise&&diff>3.14){largeArc='0';sweep='0';}else if(options.anticlockwise&&diff<=3.14){largeArc='1';sweep='0';}else if(!options.anticlockwise&&diff>3.14){largeArc='1';sweep='1';}else if(!options.anticlockwise&&diff<=3.14){largeArc='0';sweep='1';}\nif(options.start>options.end&&options.anticlockwise&&diff<=3.14){largeArc='0';sweep='0';}\nif(options.start>options.end&&options.anticlockwise&&diff>3.14){largeArc='1';sweep='1';}\nif(typeof options.moveto==='boolean'&&options.moveto===false){var d=[\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}else{var d=[\"M\",start.x,start.y,\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}\nif(options.array===true){return d;}else{return d.join(\" \");}};RG.SVG.TRIG.getArcPath2=function(options)\n{options.start-=1.57;options.end-=1.57;var start=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.start});var end=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.end});var diff=ma.abs(options.end-options.start);var largeArc='0';var sweep='0';if(!options.anticlockwise){if(diff>RG.SVG.TRIG.PI){largeArc='1';sweep='1';}else{largeArc='0';sweep='1';}}else{if(diff>RG.SVG.TRIG.PI){largeArc='1';sweep='0';}else{largeArc='0';sweep='0';}}\nif(typeof options.lineto==='boolean'&&options.lineto===false){var d=[\"M\",start.x,start.y,\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}else{var d=[\"M\",options.cx,options.cy,\"L\",start.x,start.y,\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}\nif(options.array===true){return d;}else{return d.join(\" \");}};RG.SVG.TRIG.getArcPath3=function(options)\n{options.start-=(ma.PI/2);options.end-=(ma.PI/2);var start=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.start});var end=RG.SVG.TRIG.toCartesian({cx:options.cx,cy:options.cy,r:options.r,angle:options.end});var diff=ma.abs(options.end-options.start);var largeArc='0';var sweep='0';if(!options.anticlockwise){if(diff>RG.SVG.TRIG.PI){largeArc='1';sweep='1';}else{largeArc='0';sweep='1';}}else{if(diff>RG.SVG.TRIG.PI){largeArc='1';sweep='0';}else{largeArc='0';sweep='0';}}\nif(typeof options.lineto==='boolean'&&options.lineto===false){var d=[\"M\",start.x,start.y,\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}else{var d=[\"L\",start.x,start.y,\"A\",options.r,options.r,0,largeArc,sweep,end.x,end.y];}\nif(options.array===true){return d;}else{return d.join(\" \");}};RG.SVG.TRIG.getRadiusEndPoint=function(opt)\n{if(arguments.length===1){var angle=opt.angle,r=opt.r;}else if(arguments.length===4){var angle=arguments[0],r=arguments[1];}\nvar x=ma.cos(angle)*r,y=ma.sin(angle)*r;return[x,y];};RG.SVG.drawTitle=function(obj)\n{var prop=obj.properties,valign='bottom',originalTitleX=prop.titleX,originalTitleY=prop.titleY,originalTitleSubtitleX=prop.titleSubtitleX,originalTitleSubtitleY=prop.titleSubtitleY;if(typeof originalTitleX==='string')originalTitleX.replace(/^\\+/,'');if(typeof originalTitleY==='string')originalTitleY.replace(/^\\+/,'');if(typeof originalTitleSubtitleX==='string')originalTitleSubtitleX.replace(/^\\+/,'');if(typeof originalTitleSubtitleY==='string')originalTitleSubtitleY.replace(/^\\+/,'');if(obj.type==='pie'){if(RG.SVG.isNull(prop.titleX)){prop.titleX=obj.centerx;prop.titleSubtitleX=obj.centerx;}\nif(RG.SVG.isNull(prop.titleY)){prop.titleY=obj.centery-obj.radius-10;}}\nif(obj.scale&&obj.scale.max<=0&&obj.scale.min<0&&typeof prop.titleY!=='number'&&obj.type!=='hbar'){prop.titleY=obj.height-prop.gutterBottom+10;var positionBottom=true;valign='top';}else if(typeof prop.titleY!=='number'){var positionBottom=false;prop.titleY=prop.gutterTop-10;valign='bottom';if(!RG.SVG.isNull(prop.key)){prop.titleY-=(2*(prop.keyTextSize||prop.textSize));}}\nif(prop.titleSubtitle&&typeof prop.titleSubtitleY!=='number'&&!positionBottom){prop.titleY=prop.titleY-(prop.titleSubtitleSize*1.5);}\nprop.titleSubTitleSize=prop.titleSubTitleSize||prop.textSize;prop.titleSubtitleY=prop.titleSubtitleY||prop.titleY+18;if(positionBottom&&typeof prop.titleSubtitleY!=='number'){prop.titleSubtitleY=prop.titleY+26;}\nif(prop.title){var x=typeof prop.titleX==='number'?prop.titleX+(prop.variant3dOffsetx||0):prop.gutterLeft+(obj.graphWidth/2)+(prop.variant3dOffsetx||0);var y=prop.titleY+(prop.variant3dOffsety||0);if(typeof originalTitleX==='string'){x+=parseFloat(originalTitleX);}\nif(typeof originalTitleY==='string'){y+=parseFloat(originalTitleY);}\nRG.SVG.text({object:obj,svg:obj.svg,parent:obj.svg.all,tag:'title',text:prop.title.toString(),size:prop.titleSize||(prop.textSize+4)||16,x:x,y:y,halign:prop.titleHalign||'center',valign:prop.titleValign||valign,color:prop.titleColor||prop.textColor||'black',bold:prop.titleBold||false,italic:prop.titleItalic||false,font:prop.titleFont||prop.textFont||'Arial'});}\nif(typeof prop.title==='string'&&typeof prop.titleSubtitle==='string'){y+=(prop.titleSubtitleSize*1.5);if(typeof originalTitleSubtitleX==='number'){x=originalTitleSubtitleX;}\nif(typeof originalTitleSubtitleY==='number'){y=originalTitleSubtitleY;}\nif(typeof originalTitleSubtitleX==='string'){x+=parseFloat(originalTitleSubtitleX);}\nif(typeof originalTitleSubtitleY==='string'){y+=parseFloat(originalTitleSubtitleY);}\nRG.SVG.text({object:obj,svg:obj.svg,parent:obj.svg.all,tag:'subtitle',text:prop.titleSubtitle,size:prop.titleSubtitleSize,x:x,y:y,halign:prop.titleSubtitleHalign||'center',valign:prop.titleSubtitleValign||valign,color:prop.titleSubtitleColor||prop.textColor||'#aaa',bold:prop.titleSubtitleBold||false,italic:prop.titleSubtitleItalic||false,font:prop.titleSubtitleFont||prop.textFont||'Arial'});}};RG.SVG.trim=function(str)\n{return RG.SVG.ltrim(RG.SVG.rtrim(str));};RG.SVG.ltrim=function(str)\n{return String(str).replace(/^(\\s|\\0)+/,'');};RG.SVG.rtrim=function(str)\n{return String(str).replace(/(\\s|\\0)+$/,'');};RG.SVG.parseColorLinear=function(opt)\n{var obj=opt.object,color=opt.color;if(!color||typeof color!=='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){var parts=RegExp.$1.split(':'),diff=1/(parts.length-1);if(opt&&opt.direction&&opt.direction==='horizontal'){var grad=RG.SVG.create({type:'linearGradient',parent:obj.svg.defs,attr:{id:'RGraph-linear-gradient-'+obj.uid+'-'+obj.gradientCounter,x1:opt.start||0,x2:opt.end||'100%',y1:0,y2:0,gradientUnits:opt.gradientUnits||\"userSpaceOnUse\"}});}else{var grad=RG.SVG.create({type:'linearGradient',parent:obj.svg.defs,attr:{id:'RGraph-linear-gradient-'+obj.uid+'-'+obj.gradientCounter,x1:0,x2:0,y1:opt.start||0,y2:opt.end||'100%',gradientUnits:opt.gradientUnits||\"userSpaceOnUse\"}});}\nvar stop=RG.SVG.create({type:'stop',parent:grad,attr:{offset:'0%','stop-color':RG.SVG.trim(parts[0])}});for(var j=1,len=parts.length;j<len;++j){RG.SVG.create({type:'stop',parent:grad,attr:{offset:(j*diff*100)+'%','stop-color':RG.SVG.trim(parts[j])}});}}\ncolor=grad?'url(#RGraph-linear-gradient-'+obj.uid+'-'+(obj.gradientCounter++)+')':color;return color;};RG.SVG.parseColorRadial=function(opt)\n{var obj=opt.object,color=opt.color;if(!color||typeof color!=='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){var parts=RegExp.$1.split(':'),diff=1/(parts.length-1);var grad=RG.SVG.create({type:'radialGradient',parent:obj.svg.defs,attr:{id:'RGraph-radial-gradient-'+obj.uid+'-'+obj.gradientCounter,gradientUnits:opt.gradientUnits||'userSpaceOnUse',cx:opt.cx||obj.centerx,cy:opt.cy||obj.centery,fx:opt.fx||obj.centerx,fy:opt.fy||obj.centery,r:opt.r||obj.radius}});var stop=RG.SVG.create({type:'stop',parent:grad,attr:{offset:'0%','stop-color':RG.SVG.trim(parts[0])}});for(var j=1,len=parts.length;j<len;++j){RG.SVG.create({type:'stop',parent:grad,attr:{offset:(j*diff*100)+'%','stop-color':RG.SVG.trim(parts[j])}});}}\ncolor=grad?'url(#RGraph-radial-gradient-'+obj.uid+'-'+(obj.gradientCounter++)+')':color;return color;};RG.SVG.resetColorsToOriginalValues=function(opt)\n{var obj=opt.object;if(obj.originalColors){for(var j in obj.originalColors){if(typeof j==='string'){obj.properties[j]=RG.SVG.arrayClone(obj.originalColors[j]);}}}\nif(typeof obj.resetColorsToOriginalValues==='function'){obj.resetColorsToOriginalValues();}\nobj.originalColors={};obj.colorsParsed=false;obj.gradientCounter=1;};RG.SVG.clear=function(svg)\n{for(var i=1;i<=100;++i){if(svg['background'+i]){while(svg['background'+i].lastChild){svg['background'+i].removeChild(svg['background'+i].lastChild);}}else{break;}}\nwhile(svg.all.lastChild){svg.all.removeChild(svg.all.lastChild);}\nif(svg.all.line_tooltip_hotspots){while(svg.all.line_tooltip_hotspots.lastChild){svg.all.line_tooltip_hotspots.removeChild(svg.all.line_tooltip_hotspots.lastChild);}}};RG.SVG.addCustomEventListener=function(obj,name,func)\n{if(typeof RG.SVG.events[obj.uid]==='undefined'){RG.SVG.events[obj.uid]=[];}\nif(name.substr(0,2)!=='on'){name='on'+name;}\nRG.SVG.events[obj.uid].push({object:obj,event:name,func:func});return RG.SVG.events[obj.uid].length-1;};RG.SVG.fireCustomEvent=function(obj,name)\n{if(obj&&obj.isRGraph){var uid=obj.uid;if(typeof uid==='string'&&typeof RG.SVG.events==='object'&&typeof RG.SVG.events[uid]==='object'&&RG.SVG.events[uid].length>0){for(var j=0,len=RG.SVG.events[uid].length;j<len;++j){if(RG.SVG.events[uid][j]&&RG.SVG.events[uid][j].event===name){RG.SVG.events[uid][j].func(obj);}}}}};RG.SVG.removeAllCustomEventListeners=function()\n{var uid=arguments[0];if(uid&&RG.SVG.events[uid]){RG.SVG.events[uid]={};}else{RG.SVG.events=[];}};RG.SVG.removeCustomEventListener=function(obj,i)\n{if(typeof RG.SVG.events==='object'&&typeof RG.SVG.events[obj.uid]==='object'&&typeof RG.SVG.events[obj.uid][i]==='object'){RG.SVG.events[obj.uid][i]=null;}};RG.SVG.removeHighlight=function(obj)\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&RG.SVG.isArray(highlight)&&highlight.length){for(var i=0,len=highlight.length;i<len;++i){if(highlight[i].parentNode){highlight[i].parentNode.removeChild(highlight[i]);}}}else if(highlight&&highlight.parentNode){if(obj.type==='scatter'){highlight.setAttribute('fill','transparent');}else{highlight.parentNode.removeChild(highlight);}}};RG.SVG.redraw=function()\n{if(arguments.length===1){var svg=arguments[0];RG.SVG.clear(svg);var objects=RG.SVG.OR.get('id:'+svg.parentNode.id);for(var i=0,len=objects.length;i<len;++i){RG.SVG.resetColorsToOriginalValues({object:objects[i]});objects[i].draw();}}else{var tags=RG.SVG.OR.tags();for(var i in tags){RG.SVG.redraw(tags[i]);}}};RG.SVG.parseDate=function(str)\n{var d=new Date();var defaults={seconds:'00',minutes:'00',hours:'00',date:d.getDate(),month:d.getMonth()+1,year:d.getFullYear()};var months=['january','february','march','april','may','june','july','august','september','october','november','december'],months_regex=months.join('|');for(var i=0;i<months.length;++i){months[months[i]]=i;months[months[i].substring(0,3)]=i;months_regex=months_regex+'|'+months[i].substring(0,3);}\nvar sep='[-./_=+~#:;,]+';var tokens=str.split(/ +/);for(var i=0,len=tokens.length;i<len;++i){if(tokens[i]){if(tokens[i].match(/^\\d\\d\\d\\d$/)){defaults.year=tokens[i];}\nvar res=isMonth(tokens[i]);if(typeof res==='number'){defaults.month=res+1;}\nif(tokens[i].match(/^\\d?\\d(?:st|nd|rd|th)?$/)){defaults.date=parseInt(tokens[i]);}\nif(tokens[i].match(/^(\\d\\d):(\\d\\d):?(?:(\\d\\d))?$/)){defaults.hours=parseInt(RegExp.$1);defaults.minutes=parseInt(RegExp.$2);if(RegExp.$3){defaults.seconds=parseInt(RegExp.$3);}}\nif(tokens[i].match(new RegExp('^(\\\\d\\\\d\\\\d\\\\d)'+sep+'(\\\\d\\\\d)'+sep+'(\\\\d\\\\d)$','i'))){defaults.date=parseInt(RegExp.$3);defaults.month=parseInt(RegExp.$2);defaults.year=parseInt(RegExp.$1);}\nif(tokens[i].match(new RegExp('^(\\\\d\\\\d)'+sep+'(\\\\d\\\\d)'+sep+'(\\\\d\\\\d\\\\d\\\\d)$','i'))){defaults.date=parseInt(RegExp.$1);defaults.month=parseInt(RegExp.$2);defaults.year=parseInt(RegExp.$3);}}}\nstr='{1}/{2}/{3} {4}:{5}:{6}'.format(defaults.year,String(defaults.month).length===1?'0'+(defaults.month):defaults.month,String(defaults.date).length===1?'0'+(defaults.date):defaults.date,String(defaults.hours).length===1?'0'+(defaults.hours):defaults.hours,String(defaults.minutes).length===1?'0'+(defaults.minutes):defaults.minutes,String(defaults.seconds).length===1?'0'+(defaults.seconds):defaults.seconds);return Date.parse(str);function isMonth(str)\n{var res=str.toLowerCase().match(months_regex);return res?months[res[0]]:false;}};RG.SVG.OR.add=function(obj)\n{RG.SVG.OR.objects.push(obj);return obj;};RG.SVG.OR.get=function()\n{if(typeof arguments[0]==='string'&&arguments[0].substr(0,3).toLowerCase()==='id:'){var ret=[];for(var i=0;i<RG.SVG.OR.objects.length;++i){if(RG.SVG.OR.objects[i].id===arguments[0].substr(3)){ret.push(RG.SVG.OR.objects[i]);}}\nreturn ret;}\nif(typeof arguments[0]==='string'&&arguments[0].substr(0,4).toLowerCase()==='type'){var ret=[];for(var i=0;i<RG.SVG.OR.objects.length;++i){if(RG.SVG.OR.objects[i].type===arguments[0].substr(5)){ret.push(RG.SVG.OR.objects[i]);}}\nreturn ret;}\nif(typeof arguments[0]==='string'&&arguments[0].substr(0,3).toLowerCase()==='uid'){var ret=[];for(var i=0;i<RG.SVG.OR.objects.length;++i){if(RG.SVG.OR.objects[i].uid===arguments[0].substr(4)){ret.push(RG.SVG.OR.objects[i]);}}\nreturn ret;}\nreturn RG.SVG.OR.objects;};RG.SVG.OR.tags=function()\n{var tags=[];for(var i=0;i<RG.SVG.OR.objects.length;++i){if(!tags[RG.SVG.OR.objects[i].svg.parentNode.id]){tags[RG.SVG.OR.objects[i].svg.parentNode.id]=RG.SVG.OR.objects[i].svg;}}\nreturn tags;};RG.SVG.getSVGXY=function(svg)\n{var x=0,y=0,el=svg.parentNode;do{x+=el.offsetLeft;y+=el.offsetTop;if(el.tagName.toLowerCase()=='table'&&(RG.SVG.ISCHROME||RG.SVG.ISSAFARI)){x+=parseInt(el.border)||0;y+=parseInt(el.border)||0;}\nel=el.offsetParent;}while(el&&el.tagName&&el.tagName.toLowerCase()!='body');var paddingLeft=svg.style.paddingLeft?parseInt(svg.style.paddingLeft):0,paddingTop=svg.style.paddingTop?parseInt(svg.style.paddingTop):0,borderLeft=svg.style.borderLeftWidth?parseInt(svg.style.borderLeftWidth):0,borderTop=svg.style.borderTopWidth?parseInt(svg.style.borderTopWidth):0;if(navigator.userAgent.indexOf('Firefox')>0){x+=parseInt(document.body.style.borderLeftWidth)||0;y+=parseInt(document.body.style.borderTopWidth)||0;}\nreturn[x+paddingLeft+borderLeft,y+paddingTop+borderTop];};RG.SVG.FX.update=function(func)\n{win.requestAnimationFrame=win.requestAnimationFrame||win.webkitRequestAnimationFrame||win.msRequestAnimationFrame||win.mozRequestAnimationFrame||(function(func){setTimeout(func,16.666);});win.requestAnimationFrame(func);};RG.SVG.FX.getEasingMultiplier=function(frames,frame)\n{var multiplier=ma.pow(ma.sin((frame/frames)*RG.SVG.TRIG.HALFPI),3);return multiplier;};RG.SVG.measureText=function(opt)\n{var text=opt.text||'',bold=opt.bold||false,font=opt.font||'Arial',size=opt.size||10,str=text+':'+bold+':'+font+':'+size;if(typeof RG.SVG.measuretext_cache==='undefined'){RG.SVG.measuretext_cache=[];}\nif(typeof RG.SVG.measuretext_cache=='object'&&RG.SVG.measuretext_cache[str]){return RG.SVG.measuretext_cache[str];}\nif(!RG.SVG.measuretext_cache['text-span']){var span=document.createElement('SPAN');span.style.position='absolute';span.style.padding=0;span.style.display='inline';span.style.top='-200px';span.style.left='-200px';span.style.lineHeight='1em';document.body.appendChild(span);RG.SVG.measuretext_cache['text-span']=span;}else if(RG.SVG.measuretext_cache['text-span']){var span=RG.SVG.measuretext_cache['text-span'];}\nspan.innerHTML=text.replace(/\\r?\\n/g,'<br />');span.style.fontFamily=font;span.style.fontWeight=bold?'bold':'normal';span.style.fontSize=String(size).replace(/pt$/,'')+'pt';var sizes=[span.offsetWidth,span.offsetHeight];RG.SVG.measuretext_cache[str]=sizes;return sizes;};RG.SVG.stringsToNumbers=function(str)\n{var sep=arguments[1]||',';if(typeof str==='number'){return str;}\nif(typeof str==='string'){if(str.indexOf(sep)!=-1){str=str.split(sep);}else{str=parseFloat(str);}}\nif(typeof str==='object'){for(var i=0,len=str.length;i<len;i+=1){str[i]=parseFloat(str[i]);}}\nreturn str;};RG.SVG.getAdjustedNumber=function(opt)\n{var value=opt.value,prop=opt.prop;if(typeof prop==='string'&&match(/^(\\+|-)([0-9.]+)/)){if(RegExp.$1==='+'){value+=parseFloat(RegExp.$2);}else if(RegExp.$1==='-'){value-=parseFloat(RegExp.$2);}}\nreturn value;};RG.SVG.attribution=function(){return;};RG.SVG.parseGradient=function(str)\n{};RG.SVG.random=function(opt)\n{var min=opt.min,max=opt.max,dp=opt.dp||opt.decimals||0,r=ma.random();return Number((((max-min)*r)+min).toFixed(dp));};RG.SVG.arrayRand=RG.SVG.arrayRandom=RG.SVG.random.array=function(opt)\n{var num=opt.num,min=opt.min,max=opt.max,dp=opt.dp||opt.decimals||0;for(var i=0,arr=[];i<num;i+=1){arr.push(RG.SVG.random({min:min,max:max,dp:dp}));}\nreturn arr;};RG.SVG.commonSetter=function(opt)\n{var obj=opt.object,name=opt.name,value=opt.value;if(name==='tooltipsEvent'&&value!=='click'&&value!=='mousemove'){value='click';}\nreturn{name:name,value:value};};RG.SVG.log=function(opt)\n{var num=opt.num,base=opt.base;return ma.log(num)/(base?ma.log(base):1);};RG.SVG.donut=function(opt)\n{var arcPath1=RG.SVG.TRIG.getArcPath3({cx:opt.cx,cy:opt.cy,r:opt.outerRadius,start:0,end:RG.SVG.TRIG.TWOPI,anticlockwise:false,lineto:false});var arcPath2=RG.SVG.TRIG.getArcPath3({cx:opt.cx,cy:opt.cy,r:opt.innerRadius,start:RG.SVG.TRIG.TWOPI,end:0,anticlockwise:true,lineto:false});var path=RG.SVG.create({svg:opt.svg,type:'path',attr:{d:arcPath1+arcPath2,stroke:opt.stroke,fill:opt.fill}});return path;};RG.SVG.getGlobals=function(obj)\n{var prop=obj.properties;for(i in RG.SVG.GLOBALS){if(typeof i==='string'){prop[i]=RG.SVG.arrayClone(RG.SVG.GLOBALS[i]);}}};RG.SVG.link=function(opt)\n{var a=RGraph.SVG.create({svg:bar.svg,type:'a',parent:bar.svg.all,attr:{'xlink:href':href,target:target}});var text=RGraph.SVG.create({svg:bar.svg,type:'text',parent:a,attr:{x:x,y:y,fill:fill}});text.innerHTML=text;};RG.SVG.getErrorbarsMaxValue=function(opt)\n{var obj=opt.object,prop=obj.properties,index=opt.index;if(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='number'){var value=prop.errorbars[index];}else if(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='object'&&!RG.SVG.isNull(prop.errorbars[index])&&typeof prop.errorbars[index].max==='number'){var value=prop.errorbars[index].max;}else{var value=0;}\nreturn value;};RG.SVG.getErrorbarsMinValue=function(opt)\n{var obj=opt.object,prop=obj.properties,index=opt.index;if(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='object'&&!RG.SVG.isNull(prop.errorbars[index])&&typeof prop.errorbars[index].min==='number'){var value=prop.errorbars[index].min;}else{var value=null;}\nreturn value;};RG.SVG.getErrorbarsColor=function(opt)\n{var obj=opt.object,prop=obj.properties,index=opt.index;var color=prop.errorbarsColor||'black';if(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='object'&&!RG.SVG.isNull(prop.errorbars[index])&&typeof prop.errorbars[index].color==='string'){color=prop.errorbars[index].color;}\nreturn color;};RG.SVG.getErrorbarsLinewidth=function(opt)\n{var obj=opt.object,prop=obj.properties,index=opt.index;var linewidth=prop.errorbarsLinewidth||1\nif(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='object'&&!RG.SVG.isNull(prop.errorbars[index])&&typeof prop.errorbars[index].linewidth==='number'){linewidth=prop.errorbars[index].linewidth;}\nreturn linewidth;};RG.SVG.getErrorbarsCapWidth=function(opt)\n{var obj=opt.object,prop=obj.properties,index=opt.index;var capwidth=prop.errorbarsCapwidth||10\nif(typeof prop.errorbars==='object'&&!RG.SVG.isNull(prop.errorbars)&&typeof prop.errorbars[index]==='object'&&!RG.SVG.isNull(prop.errorbars[index])&&typeof prop.errorbars[index].capwidth==='number'){capwidth=prop.errorbars[index].capwidth;}\nreturn capwidth;};if(typeof RG.SVG.tooltip!=='function'){RG.SVG.tooltip=function()\n{$a('The tooltip library has not been included!');};}})(window,document);window.$p=function(obj)\n{var indent=(arguments[2]?arguments[2]:'    ');var str='';var counter=typeof arguments[3]=='number'?arguments[3]:0;if(counter>=5){return'';}\nswitch(typeof obj){case'string':str+=obj+' ('+(typeof obj)+', '+obj.length+')';break;case'number':str+=obj+' ('+(typeof obj)+')';break;case'boolean':str+=obj+' ('+(typeof obj)+')';break;case'function':str+='function () {}';break;case'undefined':str+='undefined';break;case'null':str+='null';break;case'object':if(RGraph.SVG.isNull(obj)){str+=indent+'null\\n';}else{str+=indent+'Object {'+'\\n'\nfor(j in obj){str+=indent+'    '+j+' => '+window.$p(obj[j],true,indent+'    ',counter+1)+'\\n';}\nstr+=indent+'}';}\nbreak;default:str+='Unknown type: '+typeof obj+'';break;}\nif(!arguments[1]){alert(str);}\nreturn str;};window.$a=function(v)\n{alert(v);};window.$cl=function(v)\n{return console.log(v);};if(!String.prototype.format){String.prototype.format=function()\n{var args=arguments;return this.replace(/{(\\d+)}/g,function(str,idx)\n{return typeof args[idx-1]!=='undefined'?args[idx-1]:str;});};}"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.csv.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};if(!RGraph.SVG.AJAX)RGraph.SVG.AJAX=function(url,callback)\n{if(window.XMLHttpRequest){var httpRequest=new XMLHttpRequest();}else if(window.ActiveXObject){var httpRequest=new ActiveXObject(\"Microsoft.XMLHTTP\");}\nhttpRequest.onreadystatechange=function()\n{if(this.readyState==4&&this.status==200){this.__user_callback__=callback;this.__user_callback__(this.responseText);}}\nhttpRequest.open('GET',url,true);httpRequest.send();};if(!RGraph.SVG.getString)RGraph.SVG.AJAX.getString=function(url,callback)\n{RGraph.SVG.AJAX(url,function()\n{var str=String(this.responseText);callback(str);});};if(!RGraph.SVG.createUID)RGraph.SVG.createUID=function()\n{return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c)\n{var r=Math.random()*16|0,v=c=='x'?r:(r&0x3|0x8);return v.toString(16);});};RGraph.CSV=function(url,func)\n{this.url=url;this.ready=func;this.data=null;this.numrows=null;this.numcols=null;this.seperator=arguments[2]||',';this.endofline=arguments[3]||/\\r?\\n/;this.splitCSV=function(str,split)\n{var arr=[];var field='';var inDoubleQuotes=false;var inSingleQuotes=false;var preserve=(typeof split==='object'&&split.preserve)?true:false;if(typeof split==='object'){if(typeof split.char==='string'){split=split.char;}else{split=',';}}\nfor(var i=0,len=str.length;i<len;i+=1){char=str.charAt(i);if((char==='\"')&&!inDoubleQuotes){inDoubleQuotes=true;continue;}else if((char==='\"')&&inDoubleQuotes){inDoubleQuotes=false;continue;}\nif((char===\"'\")&&!inSingleQuotes){inSingleQuotes=true;continue;}else if((char===\"'\")&&inSingleQuotes){inSingleQuotes=false;continue;}else if(char===split&&!inDoubleQuotes&&!inSingleQuotes){arr.push(field);field='';continue;}else{field=field+char;}}\narr.push(field);if(!preserve){for(i=0,len=arr.length;i<len;i+=1){arr[i]=arr[i].trim();}}\nreturn arr;};this.fetch=function()\n{var sep=this.seperator,eol=this.endofline,obj=this;if(this.url.substring(0,3)==='id:'||this.url.substring(0,4)==='str:'){if(this.url.substring(0,3)==='id:'){var data=document.getElementById(this.url.substring(3)).innerHTML.trim();}else if(this.url.substring(0,4)==='str:'){var data=this.url.substring(4).trim();}\nobj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}\nfor(var j=0;j<row.length;j+=1){if((/^\\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}\nobj.data[i]=row;}}\nobj.ready(obj);}else{RGraph.SVG.AJAX.getString(this.url,function(data)\n{data=data.replace(/(\\r?\\n)+$/,'');obj.data=data.split(eol);obj.numrows=obj.data.length;for(var i=0,len=obj.data.length;i<len;i+=1){var row=obj.splitCSV(obj.data[i],{preserve:false,char:sep});if(!obj.numcols){obj.numcols=row.length;}\nfor(var j=0;j<row.length;j+=1){if((/^\\-?[0-9.]+$/).test(row[j])){row[j]=parseFloat(row[j]);}\nobj.data[i]=row;}}\nobj.ready(obj);});}};this.getRow=function(index)\n{var row=[];var start=arguments[1]||0;for(var i=start;i<this.numcols;i+=1){row.push(this.data[index][i]);}\nreturn row;};this.getCol=this.getColumn=function(index)\n{var col=[];var start=arguments[1]||0;for(var i=start;i<this.numrows;i+=1){col.push(this.data[i][index]);}\nreturn col;};this.fetch();};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.fx.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};RGraph.SVG.FX=RGraph.SVG.FX||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.FX.decorate=function(obj)\n{for(i in RG.SVG.FX){if(typeof RG.SVG.FX[i]==='function'){obj[i]=RG.SVG.FX[i];}}};RG.SVG.FX.fadein=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){};obj.svg.style.opacity=0;RG.SVG.redraw(this.svg);for(var i=1;i<=frames;++i){(function(index)\n{setTimeout(function()\n{obj.svg.style.opacity=(index/frames);if(index>=frames){callback(obj);}},(index/frames)*duration);})(i)}\nreturn this;};RG.SVG.FX.fadeout=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){};for(var i=1;i<=frames;++i){(function(index)\n{setTimeout(function()\n{obj.svg.style.opacity=1-(index/frames);if(index>=frames){callback(obj);}},(index/frames)*duration);})(i)}\nreturn this;};RG.SVG.FX.fadeslidein=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=0,pc=-20,step=(120-pc)/frames,color=opt.color||'white',width=this.container.offsetWidth,height=this.container.offsetHeight,callback=opt.callback||function(){};RG.SVG.redraw(this.svg);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'linear-gradient(135deg, rgba(255,255,255,0) '+pc+'%, '+color+' '+(pc+20)+'%)',width:width+'px',height:height+'px',top:0,left:0,position:'absolute'}).appendTo($(this.container));function iterator()\n{if(pc<120){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'linear-gradient(135deg, rgba(255,255,255,0) '+pc+'%, '+color+' '+(pc+20)+'%)'});pc+=step;RG.SVG.FX.update(iterator);}else{$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.fadeslideout=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=0,pc=-20,step=(120-pc)/frames,canvasXY=RG.SVG.getSVGXY(obj.svg),color=opt.color||'white',width=this.container.offsetWidth,height=this.container.offsetHeight,callback=opt.callback||function(){};$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'linear-gradient(135deg, '+color+' '+pc+'%, rgba(255,255,255,0) '+(pc+20)+'%)',width:width+'px',height:height+'px',top:0,left:0,position:'absolute'}).appendTo($(obj.svg.parentNode));function iterator()\n{if(pc<120){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'linear-gradient(135deg, '+color+' '+pc+'%, rgba(255,255,255,0) '+(pc+20)+'%)'});pc+=step;RG.SVG.FX.update(iterator);}else{RG.SVG.clear(obj.svg);$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.fadecircularinoutwards=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=1,radius=0,svgXY=RG.SVG.getSVGXY(obj.svg),color=opt.color||'white',callback=opt.callback||function(){};RG.SVG.redraw(this.svg);$('<div id=\"rgraph_fadecircularinoutwards_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, '+color+' '+radius+'%)',width:this.container.offsetWidth+'px',height:this.container.offsetHeight+'px',top:0,left:0,position:'absolute'}).appendTo($(obj.svg.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadecircularinoutwards_cover_'+obj.id).css({background:'radial-gradient(rgba(255,255,255,0) '+((frame++/ frames) * 100) + '%, ' + color + ' ' + ((frame++ /frames)*150)+'%)'});RG.SVG.FX.update(iterator);}else{$('div#rgraph_fadecircularinoutwards_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.fadecircularoutoutwards=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=0,width=this.container.offsetWidth,height=this.container.offsetHeight,canvasXY=RG.SVG.getSVGXY(obj.svg),color=opt.color||'white',callback=opt.callback||function(){};$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, transparent 0%)',width:width+'px',height:height+'px',top:0,left:0,position:'absolute'}).appendTo($(obj.svg.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient('+color+' '+((frame++/ frames) * 100) + '%, rgba(255,255,255,0) ' + ((frame++ /frames)*150)+'%)'});RG.SVG.FX.update(iterator);}else{RG.SVG.clear(obj.svg);$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.fadecircularininwards=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=0,radius=ma.max(obj.container.offsetWidth,obj.container.offsetHeight),color=opt.color||'white',callback=opt.callback||function(){};RG.SVG.redraw(this.svg);$('<div id=\"rgraph_fadeslide_cover_'+obj.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 100%, rgba(255,255,255,0) 0%)',width:this.container.offsetWidth+'px',height:this.container.offsetHeight+'px',top:0,left:0,position:'absolute'}).appendTo($(obj.svg.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient('+color+' '+(((frames-frame++)/frames)*100)+'%, rgba(255,255,255,0) '+(((frames-frame++)/frames)*120)+'%)'});RG.SVG.FX.update(iterator);}else{$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.fadecircularoutinwards=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,frame=0,radius=ma.max(this.container.offsetWidth,this.container.offsetHeight),color=opt.color||'white',callback=opt.callback||function(){};$('<div id=\"rgraph_fadeslide_cover_'+this.id+'\"></div>').css({background:'radial-gradient(rgba(255,255,255,0) 0%, rgba(255,255,255,0) 0%)',width:this.container.offsetWidth+'px',height:this.container.offsetHeight+'px',top:0,left:0,position:'absolute'}).appendTo($(obj.svg.parentNode));function iterator()\n{if(frame<frames){$('div#rgraph_fadeslide_cover_'+obj.id).css({background:'radial-gradient(rgba(255,255,255,0) '+(((frames-frame++)/frames)*100)+'%, '+color+' '+(((frames-frame++)/frames)*120)+'%)'});RG.SVG.FX.update(iterator);}else{RG.SVG.clear(obj.svg);$('div#rgraph_fadeslide_cover_'+obj.id).remove();callback(obj);}}\niterator();return this;};RG.SVG.FX.reveal=function()\n{var obj=this,opt=arguments[0]||{}\ncolor=opt.color||'white',frames=opt.frames||90,duration=(frames/60)*1000,callback=opt.callback||function(){}\nvar divs=[['rgraph_reveal_left_'+this.id,0,0,this.container.offsetWidth/2,this.container.offsetHeight],['rgraph_reveal_right_'+this.id,(this.container.offsetWidth/2),0,(this.container.offsetWidth/2),this.container.offsetHeight],['rgraph_reveal_top_'+this.id,0,0,this.container.offsetWidth,(this.container.offsetHeight/2)],['rgraph_reveal_bottom_'+this.id,0,(this.container.offsetHeight/2),this.container.offsetWidth,(this.container.offsetHeight/2)]];for(var i=0,len=divs.length;i<len;++i){var div=doc.createElement('DIV');div.id=divs[i][0];div.style.left=divs[i][1]+'px';div.style.top=divs[i][2]+'px';div.style.width=divs[i][3]+'px';div.style.height=divs[i][4]+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);}\nRG.SVG.redraw(obj.svg);jQuery('#rgraph_reveal_left_'+obj.id).animate({width:0},duration);jQuery('#rgraph_reveal_right_'+obj.id).animate({left:'+='+(this.container.offsetWidth/2),width:0},duration);jQuery('#rgraph_reveal_top_'+obj.id).animate({height:0},duration);jQuery('#rgraph_reveal_bottom_'+obj.id).animate({top:'+='+(this.container.offsetHeight/2),height:0},duration);setTimeout(function()\n{obj.container.removeChild(doc.getElementById(\"rgraph_reveal_top_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_reveal_bottom_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_reveal_left_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_reveal_right_\"+obj.id));callback(obj);},duration);return this;};RG.SVG.FX.conceal=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,callback=opt.callback||function(){},color=opt.color||'white',duration=(frames/60)*1000,frame=0;var divs=[['rgraph_conceal_left_'+obj.id,0,0,0,this.container.offsetHeight],['rgraph_conceal_right_'+obj.id,this.container.offsetWidth,0,0,this.container.offsetHeight],['rgraph_conceal_top_'+obj.id,0,0,this.container.offsetWidth,0],['rgraph_conceal_bottom_'+obj.id,0,this.container.offsetHeight,this.container.offsetWidth,0]];for(var i=0,len=divs.length;i<len;++i){var div=doc.createElement('DIV');div.id=divs[i][0];div.style.left=divs[i][1]+'px';div.style.top=divs[i][2]+'px';div.style.width=divs[i][3]+'px';div.style.height=divs[i][4]+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);}\njQuery('#rgraph_conceal_left_'+obj.id).animate({width:'+='+(this.container.offsetWidth/2)},duration);jQuery('#rgraph_conceal_right_'+obj.id).animate({left:'-='+(this.container.offsetWidth/2),width:(this.container.offsetWidth/2)},duration);jQuery('#rgraph_conceal_top_'+obj.id).animate({height:'+='+(this.container.offsetHeight/2)},duration);jQuery('#rgraph_conceal_bottom_'+obj.id).animate({top:'-='+(this.container.offsetHeight/2),height:(this.container.offsetHeight/2)},duration);setTimeout(function()\n{obj.container.removeChild(doc.getElementById(\"rgraph_conceal_top_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_conceal_bottom_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_conceal_left_\"+obj.id));obj.container.removeChild(doc.getElementById(\"rgraph_conceal_right_\"+obj.id));RG.SVG.clear(obj.svg);callback(obj);},duration);return this;};RG.SVG.FX.hblindsopen=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',height=this.container.offsetHeight/5;RG.SVG.redraw(this.svg);for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hblinds_'+i+'_'+obj.id;div.style.left=0;div.style.top=((this.container.offsetHeight*(i/5)))+'px';div.style.width=this.container.offsetWidth+'px';div.style.height=(this.container.offsetHeight/5)+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);jQuery('#rgraph_hblinds_'+i+'_'+obj.id).animate({height:0},duration);}\nsetTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_0_'+obj.id));},duration);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_1_'+obj.id));},duration);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_2_'+obj.id));},duration);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_3_'+obj.id));},duration);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_4_'+obj.id));},duration);setTimeout(function(){callback(obj);},duration);return this;};RG.SVG.FX.hblindsclose=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color='white',height=this.container.offsetHeight/5;for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hblinds_'+i+'_'+obj.id;div.style.left=0;div.style.top=(this.container.offsetHeight*(i/5))+'px';div.style.width=this.container.offsetWidth+'px';div.style.height=0;div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);jQuery('#rgraph_hblinds_'+i+'_'+obj.id).animate({height:height+'px'},duration);}\nsetTimeout(function(){RG.SVG.clear(obj.svg);},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_0_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_1_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_2_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_3_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_hblinds_4_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);};RG.SVG.FX.vblindsopen=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',width=this.container.offsetWidth/10;RG.SVG.redraw(obj.svg);for(var i=0;i<10;++i){var div=doc.createElement('DIV');div.id='rgraph_vblinds_'+i+'_'+obj.id;div.style.width=width+'px';div.style.height=this.container.offsetHeight+'px';div.style.left=(this.container.offsetWidth*(i/10))+'px';div.style.top=0;div.style.position='absolute';div.style.backgroundColor=color;obj.container.appendChild(div);jQuery('#rgraph_vblinds_'+i+'_'+obj.id).animate({width:0},duration);}\nsetTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_0_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_1_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_2_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_3_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_4_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_5_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_6_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_7_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_8_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_9_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);return this;};RG.SVG.FX.vblindsclose=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',width=this.container.offsetWidth/10;for(var i=0;i<10;++i){var div=doc.createElement('DIV');div.id='rgraph_vblinds_'+i+'_'+obj.id;div.style.left=(this.container.offsetWidth*(i/10))+'px';div.style.top=0;div.style.width=0;div.style.height=this.container.offsetHeight+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);jQuery('#rgraph_vblinds_'+i+'_'+obj.id).animate({width:width},duration);}\nsetTimeout(function(){RG.SVG.clear(obj.svg);},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_0_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_1_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_2_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_3_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_4_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_5_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_6_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_7_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_8_'+obj.id));},duration+100);setTimeout(function(){obj.container.removeChild(doc.getElementById('rgraph_vblinds_9_'+obj.id));},duration+100);setTimeout(function(){callback(obj);},duration+100);return this;};RG.SVG.FX.slidein=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',width=this.container.offsetWidth/10,from=opt.from||'left';this.container.style.overflow='hidden';RG.SVG.redraw(this.svg);this.svg.style.position='relative';if(from=='left'){this.svg.style.left=(0-this.container.offsetWidth)+'px';this.svg.style.top=0;}else if(from=='top'){this.svg.style.left=0;this.svg.style.top=(0-this.container.offsetHeight)+'px';}else if(from=='bottom'){this.svg.style.left=0;this.svg.style.top=this.container.offsetHeight+'px';}else{this.svg.style.left=this.container.offsetWidth+'px';this.svg.style.top=0;}\njQuery(this.svg).animate({left:0,top:0},duration,function()\n{callback(obj);});return this;};RG.SVG.FX.slideout=function()\n{var opt=arguments[0]||{},frames=opt.frames||90,color=opt.color||'white',to=opt.to||'left',duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},width=this.container.offetsWidth/10;this.container.style.overflow='hidden';this.svg.style.position='relative';this.svg.style.left=0;this.svg.style.top=0;if(to=='left'){jQuery(this.svg).animate({left:(0-this.container.offsetWidth)+'px'},duration,function(){callback(this);});}else if(to=='top'){jQuery(this.svg).animate({left:0,top:(0-this.container.offsetHeight)+'px'},duration,function(){callback(this);});}else if(to=='bottom'){jQuery(this.svg).animate({top:(0+this.container.offsetHeight)+'px'},duration,function(){callback(this);});}else{jQuery(this.svg).animate({left:(0+this.container.offsetWidth)+'px'},duration,function(){callback(this);});}\nreturn this;};RG.SVG.FX.hscissorsopen=function()\n{var opt=arguments[0]||{},obj=this,frames=opt.frames||90,callback=opt.callback||function(){},color=opt.color||'white',to=opt.to||'left',frame=0,duration=(frames/60)*1000,width=this.container.offsetWidth/10,height=this.container.offsetHeight/5;RG.SVG.redraw(this.svg);for(var i=0;i<5;++i){var div=doc.getElementById(\"rgraph_hscissors_\"+i+'_'+this.id)\nif(!div){var div=doc.createElement('DIV');div.id='rgraph_hscissors_'+i+'_'+this.id;div.style.width=this.container.offsetWidth+'px';div.style.height=(this.container.offsetHeight/5)+'px';div.style.left=0;div.style.top=(this.container.offsetHeight*(i/5))+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_hscissors_'+i+'_'+this.id).animate({left:this.container.offsetWidth+'px',width:0},duration);}else{jQuery('#'+'rgraph_hscissors_'+i+'_'+this.id).animate({width:0},duration);}}\nsetTimeout(function()\n{obj.container.removeChild(doc.getElementById('rgraph_hscissors_0_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_hscissors_1_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_hscissors_2_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_hscissors_3_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_hscissors_4_'+obj.id));callback(obj);},duration);return this;};RG.SVG.FX.hscissorsclose=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||60,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',height=this.container.offsetHeight/5;for(var i=0;i<5;++i){var div=doc.createElement('DIV');div.id='rgraph_hscissors_'+i+'_'+this.id;div.style.width=0;div.style.height=height+'px';div.style.left=(i%2==0?this.container.offsetWidth:0)+'px';div.style.top=(this.container.offsetHeight*(i/5))+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);if(i%2==0){jQuery('#'+'rgraph_hscissors_'+i+'_'+this.id).animate({left:0,width:this.container.offsetWidth+'px'},duration);}else{jQuery('#'+'rgraph_hscissors_'+i+'_'+this.id).animate({width:this.container.offsetWidth+'px'},duration);}}\nsetTimeout(function()\n{RG.SVG.clear(obj.svg);jQuery('#'+'rgraph_hscissors_'+0+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+1+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+2+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+3+'_'+obj.id).remove();jQuery('#'+'rgraph_hscissors_'+4+'_'+obj.id).remove();callback(obj);},duration);return this;};RG.SVG.FX.vscissorsopen=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',width=this.container.offsetWidth/10;RG.SVG.redraw(this.svg);for(var i=0;i<10;++i){var div=doc.getElementById(\"rgraph_vscissors_\"+i+'_'+this.id);if(!div){var div=doc.createElement('DIV');div.id='rgraph_vscissors_'+i+'_'+this.id;div.style.width=width+'px';div.style.height=this.container.offsetHeight+'px';div.style.left=this.container.offsetWidth*(i/10)+'px';div.style.top=0;div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_vscissors_'+i+'_'+this.id).animate({top:this.container.offsetHeight+'px',height:0},duration);}else{jQuery('#'+'rgraph_vscissors_'+i+'_'+this.id).animate({height:0},duration);}}\nsetTimeout(function()\n{obj.container.removeChild(doc.getElementById('rgraph_vscissors_0'+'_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_vscissors_1'+'_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_vscissors_2'+'_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_vscissors_3'+'_'+obj.id));obj.container.removeChild(doc.getElementById('rgraph_vscissors_4'+'_'+obj.id));callback(obj);},duration);return this;};RG.SVG.FX.vscissorsclose=function()\n{var obj=this,opt=arguments[0]||{},frames=opt.frames||90,duration=(frames/60)*1000,frame=0,callback=opt.callback||function(){},color=opt.color||'white',width=this.container.offsetWidth/10;for(var i=0;i<10;++i){var div=doc.getElementById(\"rgraph_vscissors_\"+i+'_'+this.id)\nif(!div){var div=doc.createElement('DIV');div.id='rgraph_vscissors_'+i+'_'+this.id;div.style.width=width+'px';div.style.height=0;div.style.left=(width*i)+'px';div.style.top=(i%2==0?this.container.offsetHeight:0)+'px';div.style.position='absolute';div.style.backgroundColor=color;this.container.appendChild(div);}\nif(i%2==0){jQuery('#'+'rgraph_vscissors_'+i+'_'+this.id).animate({top:0,height:this.container.offsetHeight+'px'},duration);}else{jQuery('#'+'rgraph_vscissors_'+i+'_'+this.id).animate({height:this.container.offsetHeight+'px'},duration);}}\nsetTimeout(function()\n{RG.SVG.clear(obj.svg);for(var i=0;i<10;i++){jQuery('#rgraph_vscissors_'+i+'_'+obj.id).remove();}\ncallback(obj);},duration);return this;};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.key.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};RGraph.SVG.HTML=RGraph.SVG.HTML||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.drawKey=function(obj)\n{var prop=obj.properties,key=prop.key,colors=prop.keyColors||prop.colors,defaultFont='Arial',blobSize=0,width=0,keyColorShape=prop.keyColorShape;var centerx=obj.svg.getAttribute('width')/2;if(obj.type==='funnel'){centerx=(obj.graphWidth/2)+prop.gutterLeft;}\nif(key&&key.length){for(var i=0,length=0;i<key.length;i++){var textDimensions=RG.SVG.measureText({text:key[i],bold:prop.keyTextBold||false,font:prop.keyTextFont||prop.textFont||defaultFont,size:prop.keyTextSize||prop.textSize});blobSize=ma.max(blobSize,textDimensions[1]);width=width+10+blobSize+5+textDimensions[0];}\nx=centerx-width/2;for(var i=0,y=prop.gutterTop-5;i<key.length;++i){if(i===0){if(obj.type==='pie'&&prop.highlightStyle=='outline'){y-=prop.highlightStyleOutlineWidth;}}\nvar textDimensions=RG.SVG.measureText({text:key[i],bold:prop.keyTextBold||false,font:prop.keyTextFont||prop.textFont||defaultFont,size:prop.keyTextSize||prop.textSize});var shape=prop.keyColorShape;if(typeof shape==='object'){shape=prop.keyColorShape[i];}\nif(shape==='circle'){RG.SVG.create({svg:obj.svg,type:'circle',parent:obj.svg.all,attr:{cx:x+(blobSize/2)+prop.keyOffsetx,cy:y-(blobSize/2)+prop.keyOffsety,r:blobSize/2,fill:colors[i]}});}else if(shape==='triangle'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4} L {5} {6} z'.format(x+prop.keyOffsetx+(blobSize/2),y-blobSize+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y+prop.keyOffsety,x+prop.keyOffsetx,y+prop.keyOffsety),fill:colors[i]}});}else if(shape==='line'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});}else if(shape==='dot'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});RG.SVG.create({svg:obj.svg,type:'circle',parent:obj.svg.all,attr:{cx:x+(blobSize/2)+prop.keyOffsetx,cy:y-(blobSize/2)+prop.keyOffsety,r:blobSize/4,fill:colors[i]}});}else if(shape==='squaredot'||shape==='rectdot'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});RG.SVG.create({svg:obj.svg,type:'rect',parent:obj.svg.all,attr:{x:x+(blobSize/4)+prop.keyOffsetx,y:y+(blobSize/4)-blobSize+prop.keyOffsety,width:blobSize/2,height:blobSize/2,fill:colors[i]}});}else if(typeof shape==='function'){RG.SVG.create({svg:obj.svg,type:'path',parent:obj.svg.all,attr:{d:'M {1} {2} L {3} {4}'.format(x+prop.keyOffsetx,y-(blobSize/2)+prop.keyOffsety,x+prop.keyOffsetx+blobSize,y-(blobSize/2)+prop.keyOffsety),stroke:colors[i],'stroke-width':2,'stroke-linecap':'round'}});}else{RG.SVG.create({svg:obj.svg,type:'rect',parent:obj.svg.all,attr:{x:x+prop.keyOffsetx,y:y-blobSize+prop.keyOffsety,width:blobSize,height:blobSize,fill:colors[i]}});}\nRGraph.SVG.text({object:obj,parent:obj.svg.all,tag:'key',size:prop.keyTextSize||prop.textSize,bold:typeof prop.keyTextBold==='boolean'?prop.keyTextBold:prop.textBold,italic:typeof prop.keyTextItalic==='boolean'?prop.keyTextItalic:prop.textItalic,font:prop.keyTextFont||prop.textFont,halign:'left',valign:'bottom',text:key[i],x:x+blobSize+5+prop.keyTextOffsetx+prop.keyOffsetx,y:y+prop.keyTextOffsety+prop.keyOffsety,color:prop.keyTextColor||'black',background:prop.keyTextBackground||'white',padding:0})\nx+=10+blobSize+5+textDimensions[0];}}};RG.SVG.HTML.key=function(id,prop)\n{var div=doc.getElementById(id);var str='<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" id=\"rgraph_key\" style=\"display: inline;'+(function()\n{var style=''\nfor(i in prop.tableCss){if(typeof i==='string'){style=style+i+': '+prop.tableCss[i]+';';}}\nreturn style;})()+'\" '+(prop.tableClass?'class=\"'+prop.tableClass+'\"':'')+'>';for(var i=0;i<prop.labels.length;i+=1){str+='<tr><td><div style=\"'+(function()\n{var style='';for(var j in prop.blobCss){if(typeof j==='string'){style=style+j+': '+prop.blobCss[j]+';';}}\nreturn style;})()+'display: inline-block; margin-right: 5px; margin-top: 4px; width: 15px; height: 15px; background-color: '+prop.colors[i]+'\"'+(prop.blobClass?'class=\"'+prop.blobClass+'\"':'')+'>&nbsp;</div><td>'+(prop.links&&prop.links[i]?'<a href=\"'+prop.links[i]+'\">':'')+'<span '+(prop.labelClass?'class=\"'+prop.labelClass+'\"':'')+'\" style=\"'+(function()\n{var style='';for(var j in prop.labelCss){if(typeof j==='string'){style=style+j+': '+prop.labelCss[j]+';';}}\nreturn style;})()+'\" '+(function()\n{var style='';if(prop['labelCss_'+i]){for(var j in prop['labelCss_'+i]){style=style+j+': '+prop['labelCss_'+i][j]+';';}}\nreturn style?'style=\"'+style+'\"':'';})()+'>'+prop.labels[i]+'</span>'+(prop.links&&prop.links[i]?'</a>':'')+'</td></tr>';}\ndiv.innerHTML+=(str+'</table>');return doc.getElementById('rgraph_key');};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.sheets.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};(function(win,doc,undefined)\n{RGraph.Sheets=function(key)\n{var worksheet,callback,letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ';if(arguments.length===3){worksheet=Number(arguments[1]);callback=arguments[2];}else{worksheet=1;callback=arguments[1];}\nvar url='https://spreadsheets.google.com/feeds/cells/[KEY]/[WORKSHEET]/public/full?alt=json-in-script&callback=__rgraph_JSONPCallback'.replace(/\\[KEY\\]/,key).replace(/\\[WORKSHEET\\]/,worksheet);this.load=function(url,userCallback)\n{var obj=this;__rgraph_JSONPCallback=function(json)\n{obj.json=json;var grid=[],row=0,col=0;for(var i=0;i<json.feed.entry.length;++i){row=json.feed.entry[i].gs$cell.row-1;col=json.feed.entry[i].gs$cell.col-1;if(!grid[row]){grid[row]=[];}\ngrid[row][col]=json.feed.entry[i].content.$t;}\nvar maxcols=0;for(var i=0;i<grid.length;++i){maxcols=grid[i]?Math.max(maxcols,grid[i].length):maxcols;}\nfor(var i=0;i<grid.length;++i){if(typeof grid[i]==='undefined'){grid[i]=new Array(maxcols);}\nfor(var j=0;j<maxcols;j++){if(typeof grid[i][j]==='undefined'){grid[i][j]='';}\nif(grid[i][j].match(/^[0-9]+$/)){grid[i][j]=parseInt(grid[i][j]);}else if(grid[i][j].match(/^[0-9.]+$/)){grid[i][j]=parseFloat(grid[i][j]);}}}\nobj.data=grid;userCallback(obj);};var scriptNode=document.createElement('SCRIPT');scriptNode.src=url;document.body.appendChild(scriptNode);};this.row=function(index,start)\n{var opt={},row;start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}\nrow=this.data[index-1].slice(start-1);if(opt.trim){row=RGraph.Sheets.arrayRTrim(row);}\nreturn row;};this.col=function(index,start)\n{var opt={},col=[];start=start||1;if(arguments&&typeof arguments[2]==='object'&&typeof arguments[2].trim==='boolean'){opt.trim=arguments[2].trim;}else{opt.trim=true;}\nfor(var i=0;i<this.data.length;++i){col.push(this.data[i][index-1]);}\nif(opt.trim){col=RGraph.Sheets.arrayRTrim(col);}\ncol=col.slice(start-1);return col;};this.getIndexOfLetters=function(l)\n{var parts=l.split('');if(parts.length===1){return letters.indexOf(l)+1;}else if(parts.length===2){var idx=((letters.indexOf(parts[0])+1)*26)+(letters.indexOf(parts[1])+1);return idx;}}\nthis.get=function(str)\n{str=str.toUpperCase();if(str.match(/^[a-z]+$/i)){if(str.length===1){var index=letters.indexOf(str)+1;return this.col(index,1,arguments[1]);}else if(str.length===2){var index=((letters.indexOf(str[0])+1)*26)+letters.indexOf(str[1])+1;return this.col(index,1,arguments[1]);}}\nif(str.match(/^[0-9]+$/i)){return this.row(str,null,arguments[1]);}\nif(str.match(/^([a-z]{1,2})([0-9]+)$/i)){var letter=RegExp.$1,number=RegExp.$2,col=this.get(letter,{trim:false});return col[number-1];}\nif(str.match(/^([a-z]{1,2})([0-9]+):([a-z]{1,2})([0-9]+)$/i)){var letter1=RegExp.$1,number1=RegExp.$2,letter2=RegExp.$3,number2=RegExp.$4\nif(letter1===letter2){var cells=[],index=this.getIndexOfLetters(letter1),col=this.col(index,null,{trim:false});for(var i=(number1-1);i<=(number2-1);++i){cells.push(col[i]);}}else if(number1===number2){var cells=[],row=this.row(number1,null,{trim:false}),index1=this.getIndexOfLetters(letter1),index2=this.getIndexOfLetters(letter2)\nfor(var i=(index1-1);i<=(index2-1);++i){cells.push(row[i]);}}\nif(arguments[1]&&arguments[1].trim===false){}else{cells=RGraph.Sheets.arrayRTrim(cells);}\nreturn cells;}};this.load(url,callback);};RGraph.Sheets.arrayRTrim=function(arr)\n{var out=[],content=false;for(var i=(arr.length-1);i>=0;i--){if(arr[i]||content){out.push(arr[i]);content=true;}}\narr=out.reverse();return out;};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.common.tooltips.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true,isRGraphSVG:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math;RG.SVG.tooltips={};RG.SVG.tooltips.style={display:'inline-block',position:'absolute',padding:'6px',fontFamily:'Arial',fontSize:'12pt',fontWeight:'normal',textAlign:'center',left:0,top:0,backgroundColor:'rgb(255,255,239)',color:'black',visibility:'visible',zIndex:3,borderRadius:'5px',boxShadow:'rgba(96,96,96,0.5) 0 0 5px',transition:'left ease-out .25s, top ease-out .25s'};RG.SVG.tooltip=function(opt)\n{var obj=opt.object;RG.SVG.fireCustomEvent(obj,'onbeforetooltip');if(!opt.text||typeof opt.text==='undefined'||RG.SVG.trim(opt.text).length===0){return;}\nvar prop=obj.properties;if(typeof prop.tooltipsOverride==='function'){document.body.addEventListener('mouseup',function(e)\n{obj.removeHighlight();},false);return(prop.tooltipsOverride)(obj,opt);}\nif(!RG.SVG.REG.get('tooltip')){var tooltipObj=document.createElement('DIV');tooltipObj.className=prop.tooltipsCssClass;for(var i in RG.SVG.tooltips.style){if(typeof i==='string'){tooltipObj.style[i]=RG.SVG.tooltips.style[i];}}}else{var tooltipObj=RG.SVG.REG.get('tooltip');tooltipObj.__object__.removeHighlight();tooltipObj.style.width='';}\nif(RG.SVG.REG.get('tooltip-lasty')){tooltipObj.style.left=RG.SVG.REG.get('tooltip-lastx')+'px';tooltipObj.style.top=RG.SVG.REG.get('tooltip-lasty')+'px';}\ntooltipObj.innerHTML=opt.text;tooltipObj.__text__=opt.text;tooltipObj.id='__rgraph_tooltip_'+obj.id+'_'+obj.uid+'_'+opt.index;tooltipObj.__event__=prop.tooltipsEvent||'click';tooltipObj.__object__=obj;if(typeof opt.index==='number'){tooltipObj.__index__=opt.index;}\nif(typeof opt.dataset==='number'){tooltipObj.__dataset__=opt.dataset;}\nif(typeof opt.group==='number'||RG.SVG.isNull(opt.group)){tooltipObj.__group__=opt.group;}\nif(typeof opt.sequentialIndex==='number'){tooltipObj.__sequentialIndex__=opt.sequentialIndex;}\ndocument.body.appendChild(tooltipObj);var width=tooltipObj.offsetWidth,height=tooltipObj.offsetHeight;tooltipObj.style.left=opt.event.pageX-(width/2)+'px';tooltipObj.style.top=opt.event.pageY-height-15+'px';tooltipObj.style.width=width+'px';if(!RG.SVG.REG.get('tooltip-lastx')){for(var i=0;i<=30;++i){(function(idx)\n{setTimeout(function()\n{tooltipObj.style.opacity=(idx/30)*1;},(idx/30)*200);})(i);}}\nif(parseFloat(tooltipObj.style.left)<=5){tooltipObj.style.left='5px';}\nif(parseFloat(tooltipObj.style.left)+parseFloat(tooltipObj.style.width)>window.innerWidth){tooltipObj.style.left=''\ntooltipObj.style.right='5px'}\nif(RG.SVG.isFixed(obj.svg)){var scrollTop=window.scrollY||document.documentElement.scrollTop;tooltipObj.style.position='fixed';tooltipObj.style.top=opt.event.pageY-scrollTop-height-10+'px';}\ntooltipObj.onmousedown=function(e)\n{e.stopPropagation();};tooltipObj.onmouseup=function(e)\n{e.stopPropagation();};tooltipObj.onclick=function(e)\n{if(e.button==0){e.stopPropagation();}};document.body.addEventListener('mouseup',function(e)\n{RG.SVG.hideTooltip();},false);RG.SVG.REG.set('tooltip',tooltipObj);RG.SVG.REG.set('tooltip-lastx',parseFloat(tooltipObj.style.left));RG.SVG.REG.set('tooltip-lasty',parseFloat(tooltipObj.style.top));RG.SVG.fireCustomEvent(obj,'ontooltip');};})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.funnel.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Funnel=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(conf.data);this.originalData=RG.SVG.arrayClone(conf.data);this.type='funnel';this.coords=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes=[];this.shadowNodes=[];this.max=0;this.redraw=false;this.highlight_node=null;RG.SVG.OR.add(this);this.container.style.display='inline-block';var obj=this;this.data.forEach(function(val,key,arr)\n{obj.max=ma.max(obj.max,val);});this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundbars:false,backgroundBarsOpacity:0.25,backgroundBarsColors:null,strokestyle:'white',colors:['red','black','orange','green','#6ff','#ccc','pink','orange','cyan','maroon','olive','teal'],colorsOpacity:1,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labels:[],labelsFont:null,labelsSize:null,labelsColor:null,labelsBold:null,labelsItalic:null,labelsBackground:null,labelsAlign:'center',labelsPosition:'section',linewidth:1,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(this.originalData);this.coords=[];RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;for(var i=0,len=this.data.length;i<len;++i){if(typeof this.data[i]==='string'){this.data[i]=RG.SVG.stringsToNumbers(this.data[i]);}}\nRG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.drawFunnel();this.drawBackgroundBars();this.drawLabels();RG.SVG.drawTitle(this);if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nvar obj=this;doc.body.addEventListener('mousedown',function(e)\n{obj.hideHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawFunnel=function(opt)\n{var centerx=prop.gutterLeft+(this.graphWidth/2);for(var i=0;i<(this.data.length-1);++i){var value=this.data[i],nextValue=this.data[i+1],maxWidth=this.graphWidth,width=(value/this.max)*this.graphWidth,height=this.graphHeight/(this.data.length-1),nextWidth=(nextValue/this.max)*this.graphWidth,nextHeight=height;var x1=centerx-(width/2),y1=prop.gutterTop+(height*i),x2=centerx+(width/2),y2=prop.gutterTop+(height*i);x3=centerx+(nextWidth/2),y3=prop.gutterTop+(height*(i+1)),x4=centerx-(nextWidth/2),y4=prop.gutterTop+(height*(i+1));this.coords.push({x1:x1,y1:y1,x2:x2,y2:y2,x3:x3,y3:y3,x4:x4,y4:y4,widthTop:x2-x1,widthBottom:x3-x4,height:y3-y2,object:this});}\nfor(var i=0,len=this.coords.length,sequentialIndex=0;i<len;++i,++sequentialIndex){if(i<len){var coords=this.coords[i];var path=RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:'M {1} {2} L {3} {4} L {5} {6} L {7} {8} z'.format(coords.x1,coords.y1,coords.x2,coords.y2,coords.x3,coords.y3,coords.x4,coords.y4),stroke:prop.strokestyle,fill:prop.colors[i],'stroke-width':prop.linewidth,'data-value':this.data[i],'data-index':i}});coords.element=path;if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[i]){var obj=this;(function(idx,seq)\n{path.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:idx,group:null,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i,sequentialIndex);}}}};this.redrawFunnel=function()\n{};this.drawBackgroundBars=function()\n{if(prop.backgroundBars){for(var i=0;i<this.coords.length;++i){var coords=this.coords[i];RG.SVG.create({svg:this.svg,type:'rect',parent:this.layers.background1,attr:{x:0,y:coords.y1,width:this.width,height:coords.y3-coords.y2,fill:prop.backgroundBarsColors&&typeof prop.backgroundBarsColors==='object'&&typeof prop.backgroundBarsColors[i]==='string'?prop.backgroundBarsColors[i]:prop.colors[i],'fill-opacity':prop.backgroundBarsOpacity}});}}};this.drawLabels=function()\n{var labelsGroup=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'g'});if(prop.labelsHalign==='left'){var x=15;var halign='left';}else if(prop.labelsHalign==='right'){var x=this.width-15;var halign='right';}else{var x=this.width/2;var halign='center';}\nif(prop.labels&&prop.labels.length){if(prop.labelsPosition==='section'){var sectionHeight=this.graphHeight/prop.labels.length;for(var i=0;i<prop.labels.length;++i){RG.SVG.text({object:this,svg:this.svg,parent:labelsGroup,tag:'labels',text:typeof prop.labels[i]==='string'||prop.labels[i]==='number'?prop.labels[i].toString():'',size:parseInt(prop.labelsSize),x:x,y:prop.gutterTop+(sectionHeight/2)+(i*sectionHeight),halign:halign,valign:'center',background:prop.labelsBackground||'rgba(255,255,255,0.5)',padding:2,color:prop.labelsColor||prop.textColor||'black',bold:RG.SVG.isNull(prop.labelsBold)?prop.textBold:prop.labelsBold,italic:RG.SVG.isNull(prop.labelsItalic)?prop.labelsItalic:prop.textItalic,font:prop.labelsFont||prop.textFont});}}else{for(var i=0;i<prop.labels.length;++i){RG.SVG.text({object:this,svg:this.svg,parent:labelsGroup,tag:'labels',text:typeof prop.labels[i]==='string'||prop.labels[i]==='number'?prop.labels[i].toString():'',size:parseInt(prop.labelsSize),x:x,y:prop.gutterTop+((this.graphHeight/(prop.labels.length-1))*i),halign:halign,valign:'center',background:prop.labelsBackground||'rgba(255,255,255,0.5)',padding:2,color:prop.labelsColor||prop.textColor||'black',bold:RG.SVG.isNull(prop.labelsBold)?prop.textBold:prop.labelsBold,italic:RG.SVG.isNull(prop.labelsItalic)?prop.labelsItalic:prop.textItalic,font:prop.labelsFont||prop.textFont});}}}};this.highlight=function(path)\n{var path=path.getAttribute('d');var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:path,fill:prop.highlightFill,stroke:prop.highlightStroke,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});if(prop.tooltipsEvent==='mousemove'){highlight.addEventListener('mouseout',function(e)\n{highlight.parentNode.removeChild(highlight);RG.SVG.hideTooltip();RG.SVG.REG.set('highlight',null);},false);}\nRG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundBarsColors:RG.SVG.arrayClone(prop.backgroundBarsColors)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i],direction:'horizontal'});}}\nif(prop.backgroundBarsColors&&prop.backgroundBarsColors.length){for(var i=0;i<prop.backgroundBarsColors.length;++i){prop.backgroundBarsColors[i]=RG.SVG.parseColorLinear({object:this,color:prop.backgroundBarsColors[i],direction:'horizontal'});}}\nprop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill});};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=this.hideHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight){highlight.setAttribute('fill','transparent');highlight.setAttribute('stroke','transparent');RG.SVG.REG.set('highlight',null);}};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.gauge.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Gauge=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;}\nreturn this;};this.type='gauge';this.innerMin=RG.SVG.stringsToNumbers(conf.innerMin);this.innerMax=RG.SVG.stringsToNumbers(conf.innerMax);this.outerMin=RG.SVG.stringsToNumbers(conf.outerMin);this.outerMax=RG.SVG.stringsToNumbers(conf.outerMax);this.value=RG.SVG.stringsToNumbers(conf.value);this.angleStart=0-RG.SVG.TRIG.HALFPI-(RG.SVG.TRIG.HALFPI/2);this.angleEnd=0+RG.SVG.TRIG.HALFPI+(RG.SVG.TRIG.HALFPI/2);this.angleSpan=this.angleEnd-this.angleStart;this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes={};this.shadowNodes=[];if(this.value>this.innerMax)this.value=this.innerMax;if(this.value<this.innerMin)this.value=this.innerMin;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={centerx:null,centery:null,radius:null,gutterLeft:10,gutterRight:10,gutterTop:20,gutterBottom:0,rmargin:null,backgroundFill:'Gradient(white:#FEFEFE:#E6E6E6:#dedede)',backgroundStroke:'#ddd',linewidth:1,colors:['black','black'],innerGap:5,tickmarksOuterSize:3,tickmarksInnerSize:3,tickmarksCount:10,textColor:'black',textFont:'sans-serif',textSize:10,textBold:false,textItalic:false,labelsIngraph:true,labelsIngraphFont:null,labelsIngraphSize:null,labelsIngraphBold:null,labelsIngraphItalic:null,labelsIngraphColor:null,labelsIngraphUnitsPre:'',labelsIngraphUnitsPost:'',labelsIngraphThousand:',',labelsIngraphPoint:'.',labelsIngraphFormatter:null,labelsIngraphDecimals:0,labelsIngraphPadding:3,labelsIngraphBackground:'Gradient(#ddd:#eee)',labelsIngraphRounded:2,scaleInnerFont:null,scaleInnerSize:null,scaleInnerBold:null,scaleInnerItalic:null,scaleInnerColor:null,scaleInnerUnitsPre:'',scaleInnerUnitsPost:'',scaleInnerPoint:'.',scaleInnerThousand:',',scaleInnerDecimals:0,scaleInnerFormatter:null,scaleInnerLabelsCount:10,scaleInnerRound:false,scaleOuter:true,scaleOuterFont:null,scaleOuterSize:null,scaleOuterBold:null,scaleOuterItalic:null,scaleOuterColor:null,scaleOuterUnitsPre:'',scaleOuterUnitsPost:'',scaleOuterPoint:'.',scaleOuterThousand:',',scaleOuterDecimals:0,scaleOuterFormatter:null,scaleOuterLabelsCount:10,scaleOuterRound:false,title:'',titleSize:null,titleX:null,titleY:'+5',titleHalign:'center',titleValign:'bottom',titleColor:null,titleFont:null,titleBold:true,titleItalic:false,titleSubtitle:null,titleSubtitleSize:null,titleSubtitleX:null,titleSubtitleY:'+15',titleSubtitleHalign:'center',titleSubtitleValign:'center',titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,needleColor:'#666',centerpinRadius:5,adjustable:false};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.nodes={};this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;if(prop.title.length>0){this.graphHeight-=prop.gutterTop;}\nthis.centerx=(this.graphWidth/2)+prop.gutterLeft;this.centery=(this.graphHeight/2)+prop.gutterTop;this.radius=ma.min(this.graphWidth/2,this.graphHeight/2);if(prop.title.length>0){this.centery+=10;this.radius-=10;}\nthis.centerx=typeof prop.centerx==='number'?prop.centerx:this.centerx;this.centery=typeof prop.centery==='number'?prop.centery:this.centery;this.radius=typeof prop.radius==='number'?prop.radius:this.radius;if(typeof prop.radius==='string'&&prop.radius.match(/^\\+|-\\d+$/))this.radius+=parseFloat(prop.radius);if(typeof prop.centerx==='string'&&prop.centerx.match(/^\\+|-\\d+$/))this.centery+=parseFloat(prop.centerx);if(typeof prop.centery==='string'&&prop.centery.match(/^\\+|-\\d+$/))this.centerx+=parseFloat(prop.centery);RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();if(prop.rmargin===null){if(prop.scaleOuter){prop.rmargin=40;}else{prop.rmargin=25;}}\nthis.drawMeter();this.drawNeedle();if(prop.labelsIngraph){this.drawIngraph();}\nRG.SVG.drawTitle(this);if(prop.adjustable){this.adjusting_mousedown=false;var func=function(e)\n{var svg=e.currentTarget,obj=svg.__object__,mouseX=e.offsetX,mouseY=e.offsetY;var radius=RG.SVG.TRIG.getHypLength({x1:mouseX,y1:mouseY,x2:obj.centerx,y2:obj.centery,object:obj});if(radius>obj.radius){return;}\nvar value=obj.getValue(e);obj.value=value;obj.drawNeedle();};var obj=this;this.svg.addEventListener('mousedown',function(e)\n{this.adjusting_mousedown=true;func(e);},false);this.svg.addEventListener('mousemove',function(e)\n{if(this.adjusting_mousedown){func(e);}},false);this.svg.addEventListener('mouseup',function(e)\n{this.adjusting_mousedown=false;},false);}\nRG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawMeter=function()\n{this.scaleInner=RG.SVG.getScale({object:this,numlabels:prop.scaleInnerLabelsCount,unitsPre:prop.scaleInnerUnitsPre,unitsPost:prop.scaleInnerUnitsPost,max:this.innerMax,min:this.innerMin,point:prop.scaleInnerPoint,round:prop.scaleInnerRound,thousand:prop.scaleInnerThousand,decimals:prop.scaleInnerDecimals,strict:true,formatter:prop.scaleInnerFormatter});this.scaleOuter=RG.SVG.getScale({object:this,numlabels:prop.scaleOuterLabelsCount,unitsPre:prop.scaleOuterUnitsPre,unitsPost:prop.scaleOuterUnitsPost,max:this.outerMax,min:this.outerMin,point:prop.scaleOuterPoint,round:prop.scaleOuterRound,thousand:prop.scaleOuterThousand,decimals:prop.scaleOuterDecimals,strict:true,formatter:prop.scaleOuterFormatter});this.nodes.background=RG.SVG.create({svg:this.svg,type:'circle',parent:this.svg.all,attr:{cx:this.centerx,cy:this.centery,r:this.radius,stroke:prop.backgroundStroke,fill:prop.backgroundFill}});this.nodes.innerAxisGroup=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'innerAxisGroup',}});this.nodes.outerAxisGroup=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'outerAxisGroup',}});var innerPath=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.innerGap-prop.rmargin,start:this.angleStart,end:this.angleEnd,anticlockwise:false,lineto:false});var inner=RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.innerAxisGroup,attr:{d:innerPath,stroke:prop.colors[1],fill:'transparent','stroke-width':prop.linewidth}});var outerPath=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.rmargin,start:this.angleStart,end:this.angleEnd,anticlockwise:false,lineto:false});var outer=RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.outerAxisGroup,attr:{d:outerPath,stroke:prop.colors[0],fill:'transparent','stroke-width':prop.linewidth}});this.nodes.outerAxis=outerPath;this.nodes.innerAxis=innerPath;var numticks=prop.tickmarksCount,gap=this.angleSpan/numticks,numlabels=prop.tickmarksCount;for(var i=0;i<=numticks;++i){if(prop.scaleOuter){var path_a=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.rmargin,start:this.angleStart+(i*gap),end:this.angleStart+(i*gap),anticlockwise:false,lineto:false});var path_b=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius+prop.tickmarksOuterSize-prop.rmargin,start:this.angleStart+(i*gap),end:this.angleStart+(i*gap),anticlockwise:false,lineto:true});RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.outerAxisGroup,attr:{d:path_a+' '+path_b,stroke:prop.colors[0],fill:'transparent','stroke-width':prop.linewidth,'stroke-linecap':'square'}});var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius+prop.tickmarksOuterSize+10-prop.rmargin,angle:this.angleStart-RG.SVG.TRIG.HALFPI+(i*gap)});var halign=(coords.x>this.centerx?'left':'right');if(i/numlabels===0.5){halign='center';}\nRG.SVG.text({object:this,svg:this.svg,parent:this.nodes.outerAxisGroup,tag:'scale.outer',text:(i===0?RG.SVG.numberFormat({object:this,prepend:prop.scaleOuterUnitsPre,append:prop.scaleOuterUnitsPost,num:this.outerMin.toFixed(prop.scaleOuterDecimals),point:prop.scaleOuterPoint,thousand:prop.scaleOuterThousand}):this.scaleOuter.labels[i-1]),size:prop.scaleOuterSize||prop.textSize,x:coords.x,y:coords.y,halign:halign,valign:'center',padding:2,color:prop.scaleOuterColor||prop.textColor,bold:typeof prop.scaleOuterBold==='boolean'?prop.scaleOuterBold:prop.textBold,italic:typeof prop.scaleOuterItalic==='boolean'?prop.scaleOuterItalic:prop.textItalic,font:prop.scaleOuterFont||prop.textFont});}else{var path_a=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.rmargin,start:this.angleStart,end:this.angleStart,anticlockwise:false,lineto:false});var path_b=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.innerGap-prop.rmargin,start:this.angleStart,end:this.angleStart,anticlockwise:false,lineto:true});RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.innerAxisGroup,attr:{d:path_a+path_b,stroke:prop.colors[1],fill:'transparent','stroke-width':prop.linewidth,'stroke-linecap':'square'}});var path_a=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.rmargin,start:this.angleEnd,end:this.angleEnd,anticlockwise:false,lineto:false});var path_b=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.innerGap-prop.rmargin,start:this.angleEnd,end:this.angleEnd,anticlockwise:false,lineto:true});RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.innerAxisGroup,attr:{d:path_a+path_b,stroke:prop.colors[1],fill:'transparent','stroke-width':prop.linewidth,'stroke-linecap':'square'}});}\nvar path_a=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.rmargin-prop.innerGap,start:this.angleStart+(i*gap),end:this.angleStart+(i*gap),anticlockwise:false,lineto:false});var path_b=RG.SVG.TRIG.getArcPath3({cx:this.centerx,cy:this.centery,r:this.radius-prop.innerGap-prop.tickmarksOuterSize-prop.rmargin,start:this.angleStart+(i*gap),end:this.angleStart+(i*gap),anticlockwise:false,lineto:true});RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.innerAxisGroup,attr:{d:path_a+' '+path_b,stroke:prop.colors[1],fill:'transparent','stroke-width':prop.linewidth,'stroke-linecap':'square'}});var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius-prop.innerGap-prop.tickmarksInnerSize-10-prop.rmargin,angle:this.angleStart-RG.SVG.TRIG.HALFPI+(i*gap)});var halign=(coords.x>this.centerx?'right':'left');if(i/numlabels===0.5){halign='center';}\nRG.SVG.text({object:this,svg:this.svg,parent:this.nodes.innerAxisGroup,tag:'scale.inner',text:(i===0?RG.SVG.numberFormat({object:this,prepend:prop.scaleInnerUnitsPre,append:prop.scaleInnerUnitsPost,num:this.innerMin.toFixed(prop.scaleInnerDecimals),point:prop.scaleInnerPoint,thousand:prop.scaleInnerThousand}):this.scaleInner.labels[i-1]),size:prop.scaleInnerSize||prop.textSize,x:coords.x,y:coords.y,halign:halign,valign:'center',padding:2,color:prop.scaleInnerColor||prop.textColor,bold:typeof prop.scaleInnerBold==='boolean'?prop.scaleInnerBold:prop.textBold,italic:typeof prop.scaleInnerItalic==='boolean'?prop.scaleInnerItalic:prop.textItalic,font:prop.scaleInnerFont||prop.textFont});}};this.drawIngraph=function()\n{if(this.nodes.labelsIngraphGroup){this.nodes.labelsIngraphGroup.parentNode.removeChild(this.nodes.labelsIngraphGroup);}\nthis.nodes.labelsIngraphGroup=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'labelsIngraphGroup',}});this.nodes.labelsIngraph=RG.SVG.text({object:this,parent:this.nodes.labelsIngraphGroup,text:RG.SVG.numberFormat({prepend:prop.labelsIngraphUnitsPre,append:prop.labelsIngraphUnitsPost,decimal_seperator:prop.labelsIngraphPoint,thousand_seperator:prop.labelsIngraphThousand,formatter:prop.labelsIngraphFormatter,num:this.value.toFixed(prop.labelsIngraphDecimals)}),x:this.centerx,y:this.centery+this.radius-prop.rmargin-30,background:prop.labelsIngraphBackground,backgroundRounded:prop.labelsIngraphRounded,padding:prop.labelsIngraphPadding,halign:'center',valign:'center',size:prop.labelsIngraphSize||prop.textSize+2,bold:typeof prop.labelsIngraphBold==='boolean'?prop.labelsIngraphBold:prop.textBold,italic:typeof prop.labelsIngraphItalic==='boolean'?prop.labelsIngraphItalic:prop.textItalic,font:prop.labelsIngraphFont||prop.textFont,color:prop.labelsIngraphColor||prop.textColor});var rect=this.nodes.labelsIngraph.previousSibling;rect.setAttribute('stroke','#aaa');var func=function(e){e.stopPropagation();};rect.addEventListener('mousedown',func,false);this.nodes.labelsIngraph.addEventListener('mousedown',func,false);};this.drawNeedle=function()\n{if(this.nodes.needleGroup){this.nodes.needleGroup.parentNode.removeChild(this.nodes.needleGroup);}\nthis.nodes.needleGroup=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'needle-group',fill:prop.needleColor,stroke:prop.needleColor}});var angle=(this.value-this.innerMin)/(this.innerMax-this.innerMin)*this.angleSpan;angle+=RG.SVG.TRIG.HALFPI+(RG.SVG.TRIG.HALFPI/2);var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius-60,angle:angle});var coords2=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:prop.centerpinRadius,angle:angle-RG.SVG.TRIG.HALFPI});var coords3=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:prop.centerpinRadius,angle:angle+RG.SVG.TRIG.HALFPI});RG.SVG.create({svg:this.svg,type:'path',parent:this.nodes.needleGroup,attr:{'stroke-width':1,'stroke-linecap':\"round\",d:'M{1} {2} L{3} {4} L{5} {6} z'.format(coords.x,coords.y,coords2.x,coords2.y,coords3.x,coords3.y)}});RG.SVG.create({svg:this.svg,type:'circle',parent:this.nodes.needleGroup,attr:{cx:this.centerx,cy:this.centery,r:prop.centerpinRadius}});if(prop.labelsIngraph){this.drawIngraph();}};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundFill:RG.SVG.arrayClone(prop.backgroundFill),backgroundStroke:RG.SVG.arrayClone(prop.backgroundStroke),labelsIngraphBackground:RG.SVG.arrayClone(prop.labelsIngraphBackground)}}\nprop.backgroundFill=RG.SVG.parseColorLinear({object:this,color:prop.backgroundFill,start:prop.gutterTop,end:this.height-prop.gutterBottom,direction:'vertical'});prop.backgroundStroke=RG.SVG.parseColorLinear({object:this,color:prop.backgroundStroke,start:prop.gutterTop,end:this.height-prop.gutterBottom,direction:'vertical'});prop.labelsIngraphBackground=RG.SVG.parseColorLinear({object:this,color:prop.labelsIngraphBackground,direction:'vertical',gradientUnits:'objectBoundingBox'});};this.getValue=function(e)\n{var mouseX=e.offsetX,mouseY=e.offsetY;var angle=RG.SVG.TRIG.getAngleByXY({cx:this.centerx,cy:this.centery,x:mouseX,y:mouseY});if(mouseX<this.centerx){angle=angle-RG.SVG.TRIG.TWOPI;}\nvar value=((angle-this.angleStart)/(this.angleEnd-this.angleStart));value=value*(this.innerMax-this.innerMin);value=value+this.innerMin;if(value<this.innerMin)value=this.innerMin;if(value>this.innerMax)value=this.innerMax;return value;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.hbar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.HBar=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=conf.data;this.type='hbar';this.coords=[];this.coords2=[];this.stackedBackfaces=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:100,gutterRight:35,gutterTop:35,gutterBottom:35,gutterLeftAutosize:true,backgroundColor:null,backgroundImage:null,backgroundImageAspect:'none',backgroundImageStretch:true,backgroundImageOpacity:null,backgroundImageX:null,backgroundImageY:null,backgroundImageW:null,backgroundImageH:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,colors:['red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black','red','#0f0','#00f','#ff0','#0ff','#0f0','pink','orange','gray','black'],colorsSequential:false,strokestyle:'rgba(0,0,0,0)',vmargin:3,vmarginGrouped:2,vmarginTop:0,vmarginBottom:0,xaxis:true,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisColor:'black',xaxisLabels:[],xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,xaxisLabelsCount:5,xaxisScale:true,xaxisUnitsPre:'',xaxisUnitsPost:'',xaxisStrict:false,xaxisDecimals:0,xaxisPoint:'.',xaxisThousand:',',xaxisRound:false,xaxisMax:null,xaxisMin:0,xaxisFormatter:null,xaxisLabelsPositionEdgeTickmarksCount:null,xaxisTextColor:null,xaxisTextBold:null,xaxisTextItalic:null,xaxisTextFont:null,xaxisTextSize:null,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:3,yaxisLabels:[],yaxisLabelsPosition:'section',yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisScale:false,yaxisLabelsPositionSectionTickmarksCount:null,yaxisColor:'black',yaxisTextFont:null,yaxisTextSize:null,yaxisTextColor:null,yaxisTextBold:null,yaxisTextItalic:null,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labelsAbove:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:null,labelsAboveBackgroundPadding:0,labelsAboveUnitsPre:null,labelsAboveUnitsPost:null,labelsAbovePoint:null,labelsAboveThousand:null,labelsAboveFormatter:null,labelsAboveDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:0,labelsAboveHalign:'left',labelsAboveValign:'center',labelsAboveSpecific:null,linewidth:1,grouping:'grouped',tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleSize:10,titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.coords=[];this.coords2=[];RG.SVG.createDefs(this);if(prop.gutterLeftAutosize){for(var i=0,len=prop.yaxisLabels.length,maxLength=0;i<len;++i){var sizes=RG.SVG.measureText({text:prop.yaxisLabels[i],bold:prop.yaxisTextBold||prop.textBold,size:prop.yaxisTextSize||prop.textSize,font:prop.yaxisTextFont||prop.textFont});maxLength=ma.max(maxLength,sizes[0]);}\nprop.gutterLeft=maxLength+15-prop.yaxisLabelsOffsetx;if(prop.gutterLeft<15){prop.gutterLeft=15;}}\nthis.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();var values=[];for(var i=0,max=0;i<this.data.length;++i){if(typeof this.data[i]==='number'){values.push(this.data[i]);}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='grouped'){values.push(RG.SVG.arrayMax(this.data[i]));}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='stacked'){values.push(RG.SVG.arraySum(this.data[i]));}}\nvar max=RG.SVG.arrayMax(values);if(typeof prop.xaxisMax==='number'){max=prop.xaxisMax;}\nif(prop.xaxisMin==='mirror'||prop.xaxisMin==='middle'||prop.xaxisMin==='center'){var mirrorScale=true;prop.xaxisMin=prop.xaxisMax* -1;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.xaxisLabelsCount,unitsPre:prop.xaxisUnitsPre,unitsPost:prop.xaxisUnitsPost,max:max,min:prop.xaxisMin,point:prop.xaxisPoint,round:prop.xaxisRound,thousand:prop.xaxisThousand,decimals:prop.xaxisDecimals,strict:typeof prop.xaxisMax==='number',formatter:prop.xaxisFormatter});if(mirrorScale){this.scale=RG.SVG.getScale({object:this,numlabels:prop.xaxisLabelsCount,unitsPre:prop.xaxisUnitsPre,unitsPost:prop.xaxisUnitsPost,max:this.scale.max,min:this.scale.max* -1,point:prop.xaxisPoint,round:false,thousand:prop.xaxisThousand,decimals:prop.xaxisDecimals,strict:typeof prop.xaxisMax==='number',formatter:prop.xaxisFormatter});}\nthis.max=this.scale.max;prop.xaxisMax=this.scale.max;this.min=this.scale.min;prop.xaxisMin=this.scale.min;RG.SVG.drawBackground(this);this.drawBars();RG.SVG.drawXAxis(this);RG.SVG.drawYAxis(this);this.drawLabelsAbove();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.attribution(this);var obj=this;document.body.addEventListener('mousedown',function(e)\n{RG.SVG.removeHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBars=function()\n{if(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nfor(var i=0,sequentialIndex=0;i<this.data.length;++i,++sequentialIndex){if(typeof this.data[i]==='number'){var outerSegment=(this.graphHeight-prop.vmarginTop-prop.vmarginBottom)/this.data.length,width=this.getWidth(this.data[i]),height=((this.graphHeight-prop.vmarginTop-prop.vmarginBottom)/this.data.length)-prop.vmargin-prop.vmargin,x=this.getXCoord((this.scale.min<0&&this.scale.max<0)||(this.scale.min>0&&this.scale.max>0)?this.scale.min:0)-(this.data[i]<0?width:0),y=prop.gutterTop+prop.vmarginTop+prop.vmargin+(outerSegment*i);if(this.scale.min<0&&this.scale.max<0){x=this.width-prop.gutterRight-width;}\nvar rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{stroke:prop.strokestyle,fill:prop.colorsSequential?(prop.colors[sequentialIndex]?prop.colors[sequentialIndex]:prop.colors[prop.colors.length-1]):prop.colors[0],x:x,y:y,width:width,height:height,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-index':i,'data-original-width':width,'data-original-height':height,'data-sequential-index':sequentialIndex,'data-value':this.data[i],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[0]){this.coords2[0]=[];}\nthis.coords2[0].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:idx,group:null,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);})(i,sequentialIndex);}}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='grouped'){var outerSegment=((this.graphHeight-prop.vmarginTop-prop.vmarginBottom)/this.data.length),innerSegment=outerSegment-(2*prop.vmargin);for(var j=0;j<this.data[i].length;++j,++sequentialIndex){var width=ma.abs((this.data[i][j]/(this.max-this.min))*this.graphWidth),height=((innerSegment-((this.data[i].length-1)*prop.vmarginGrouped))/this.data[i].length),y=prop.gutterTop+prop.vmargin+prop.vmarginTop+(outerSegment*i)+(j*height)+(j*prop.vmarginGrouped),x=this.getXCoord(0)-(this.data[i][j]<0?width:0);if(this.scale.max<0&&this.scale.min<this.scale.max){var x1=this.getXCoord(this.data[i][j]);var x2=this.getXCoord(this.scale.max);x=x1;width=x2-x1;}else if(this.scale.min>0&&this.scale.max>this.scale.min){var x1=this.getXCoord(this.data[i][j]);var x2=this.getXCoord(this.scale.min);x=this.getXCoord(this.scale.min);width=x1-x2;}\nvar rect=RG.SVG.create({svg:this.svg,type:'rect',parent:this.svg.all,attr:{stroke:prop['strokestyle'],fill:(prop.colorsSequential&&prop.colors[sequentialIndex])?prop.colors[sequentialIndex]:(prop.colors[j]?prop.colors[j]:prop.colors[prop.colors.length-1]),x:x,y:y,width:width,height:height,'stroke-width':prop.linewidth,'data-index':i,'data-original-width':width,'data-sequential-index':sequentialIndex,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[sequentialIndex]:'','data-value':this.data[i][j],filter:prop.shadow?'url(#dropShadow)':''}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,group:idx,index:indexes[1],sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i,sequentialIndex);}}\n--sequentialIndex;}else if(RG.SVG.isArray(this.data[i])&&prop.grouping==='stacked'){var section=((this.graphHeight-prop.vmarginTop-prop.vmarginBottom)/this.data.length);var x=this.getXCoord(0);for(var j=0;j<this.data[i].length;++j,++sequentialIndex){var outerHeight=(this.graphHeight-prop.vmarginTop-prop.vmarginBottom)/this.data.length,width=ma.abs((this.data[i][j]/(this.max-this.min))*this.graphWidth),height=outerHeight-(2*prop.vmargin),y=prop.gutterTop+prop.vmargin+prop.vmarginTop+(outerHeight*i);if(j===0&&prop.shadow){var fullWidth=ma.abs((RG.SVG.arraySum(this.data[i])/(this.max-this.min))*this.graphWidth);var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:x,y:y,width:fullWidth,height:height,fill:'white','stroke-width':0,'data-index':i,filter:'url(#dropShadow)'}});this.stackedBackfaces[i]=rect;}\nvar rect=RG.SVG.create({svg:this.svg,type:'rect',parent:this.svg.all,attr:{stroke:prop['strokestyle'],fill:prop.colorsSequential?(prop.colors[sequentialIndex]?prop.colors[sequentialIndex]:prop.colors[prop.colors.length-1]):(prop.colors[j]?prop.colors[j]:prop.colors[prop.colors.length-1]),x:x,y:y,width:width,height:height,'stroke-width':prop.linewidth,'data-original-width':width,'data-original-height':height,'data-original-x':x,'data-original-y':y,'data-index':i,'data-sequential-index':sequentialIndex,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[sequentialIndex]:'','data-value':this.data[i][j]}});this.coords.push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!this.coords2[i]){this.coords2[i]=[];}\nthis.coords2[i].push({object:this,element:rect,x:parseFloat(rect.getAttribute('x')),y:parseFloat(rect.getAttribute('y')),width:parseFloat(rect.getAttribute('width')),height:parseFloat(rect.getAttribute('height'))});if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[sequentialIndex]){var obj=this;(function(idx,seq)\n{rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);RG.SVG.tooltip({object:obj,index:indexes[1],group:idx,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i,sequentialIndex);}\nx+=width;}\n--sequentialIndex;}}};this.getXCoord=function(value)\n{var prop=this.properties;if(value>this.scale.max){return null;}\nvar x;if(value<this.scale.min){return null;}\nx=((value-this.scale.min)/(this.scale.max-this.scale.min));x*=this.graphWidth;x+=prop.gutterLeft;return x;};this.getWidth=function(value)\n{if(this.scale.max<=0&&this.scale.min<this.scale.max){var x1=this.getXCoord(this.scale.max);var x2=this.getXCoord(value);}else if(this.scale.min>0&&this.scale.max>this.scale.min){var x1=this.getXCoord(this.scale.min);var x2=this.getXCoord(value);}else{var x1=this.getXCoord(0);var x2=this.getXCoord(value);}\nreturn ma.abs(x1-x2);};this.highlight=function(rect)\n{var x=rect.getAttribute('x'),y=rect.getAttribute('y'),width=rect.getAttribute('width'),height=rect.getAttribute('height');var highlight=RG.SVG.create({svg:this.svg,type:'rect',parent:this.svg.all,attr:{stroke:prop.highlightStroke,fill:prop.highlightFill,x:x,y:y,width:width,height:height,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});RG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i],direction:'horizontal',start:prop.gutterLeft,end:this.width-prop.gutterRight});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor,direction:'horizontal',start:prop.gutterLeft,end:this.width-prop.gutterRight});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill,direction:'horizontal',start:prop.gutterLeft,end:this.width-prop.gutterRight});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor});};this.drawLabelsAbove=function()\n{if(prop.labelsAbove){var data=RG.SVG.arrayLinearize(this.data);for(var i=0;i<this.coords.length;++i){var value=data[i].toFixed(typeof prop.labelsAboveDecimals==='number'?prop.labelsAboveDecimals:prop.xaxisDecimals);var indexes=RG.SVG.sequentialIndexToGrouped(i,this.data);if(RG.SVG.isArray(this.data[indexes[0]])&&prop.grouping==='stacked'){if((indexes[1]+1)===this.data[indexes[0]].length){value=RG.SVG.arraySum(this.data[indexes[0]]);value=value.toFixed(typeof prop.labelsAboveDecimals==='number'?prop.labelsAboveDecimals:prop.xaxisDecimals);}else{continue;}}\nvar str=prop.labelsAboveSpecific?prop.labelsAboveSpecific[i].toString():RG.SVG.numberFormat({object:this,num:value,prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});var bold=typeof prop.labelsAboveBold==='boolean'?prop.labelsAboveBold:prop.textBold,italic=typeof prop.labelsAboveItalic==='boolean'?prop.labelsAboveItalic:prop.textItalic,size=prop.labelsAboveSize||prop.textSize,font=prop.labelsAboveFont||prop.textFont,halign=prop.labelsAboveHalign,valign=prop.labelsAboveValign;var dimensions=RG.SVG.measureText({text:str,bold:bold,font:font,size:size});var x=(value>=0)?(parseFloat(this.coords[i].element.getAttribute('x'))+parseFloat(this.coords[i].element.getAttribute('width'))+7+prop.labelsAboveOffsetx):parseFloat(this.coords[i].element.getAttribute('x')-7-prop.labelsAboveOffsetx),y=parseFloat(this.coords[i].element.getAttribute('y'))+parseFloat(this.coords[i].element.getAttribute('height')/2)+prop.labelsAboveOffsety,width=dimensions[0],height=dimensions[1],halign=(value>=0)?'left':'right';if(x+width>this.width&&value>0){halign='right';x=this.width-5;prop.labelsAboveBackground=prop.labelsAboveBackground||'rgba(255,255,255,0.95)';}\nvar text=RG.SVG.text({object:this,parent:this.svg.all,tag:'labels.above',text:str,x:x,y:y,halign:halign,valign:valign,font:font,size:size,bold:bold,italic:italic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground||null,padding:prop.labelsAboveBackgroundPadding||0});}}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,obj=this,data=[],height=null,seq=0;data=RG.SVG.arrayClone(this.data);this.draw();var iterate=function()\n{for(var i=0,seq=0,len=obj.coords.length;i<len;++i,++seq){var multiplier=(frame/frames)*RG.SVG.FX.getEasingMultiplier(frames,frame)*RG.SVG.FX.getEasingMultiplier(frames,frame);if(typeof data[i]==='number'){width=ma.abs(obj.getXCoord(data[i])-obj.getXCoord(0));obj.data[i]=data[i]*multiplier;width=multiplier*width;obj.coords[seq].element.setAttribute('width',width);obj.coords[seq].element.setAttribute('x',data[i]>0?obj.getXCoord(0):obj.getXCoord(0)-width);}else if(typeof data[i]==='object'){var accumulativeWidth=0;for(var j=0,len2=data[i].length;j<len2;++j,++seq){width=ma.abs(obj.getXCoord(data[i][j])-obj.getXCoord(0));width=multiplier*width;obj.data[i][j]=data[i][j]*multiplier;obj.coords[seq].element.setAttribute('width',width);obj.coords[seq].element.setAttribute('x',data[i][j]>0?(obj.getXCoord(0)+accumulativeWidth):(obj.getXCoord(0)-width-accumulativeWidth));accumulativeWidth+=(prop.grouping==='stacked'?width:0);}\nif(obj.stackedBackfaces[i]){obj.stackedBackfaces[i].setAttribute('width',accumulativeWidth);obj.stackedBackfaces[i].setAttribute('x',prop.gutterLeft);}\n--seq;}}\nif(frame++<frames){RG.SVG.FX.update(iterate);}else if(opt.callback){(opt.callback)(obj);}};iterate();return this;};this.wave=function()\n{this.draw();var obj=this,opt=arguments[0]||{};opt.frames=opt.frames||60;opt.startFrames=[];opt.counters=[];var framesperbar=opt.frames/3,frame=-1,callback=opt.callback||function(){},width;for(var i=0,len=this.coords.length;i<len;i+=1){opt.startFrames[i]=((opt.frames/2)/(obj.coords.length-1))*i;opt.counters[i]=0;this.coords[i].element.setAttribute('width',0);}\nfunction iterator()\n{++frame;for(var i=0,len=obj.coords.length;i<len;i+=1){if(frame>opt.startFrames[i]){var originalWidth=obj.coords[i].element.getAttribute('data-original-width'),value=parseFloat(obj.coords[i].element.getAttribute('data-value'));obj.coords[i].element.setAttribute('width',width=ma.min(((frame-opt.startFrames[i])/framesperbar)*originalWidth,originalWidth));obj.coords[i].element.setAttribute('x',value>=0?obj.getXCoord(0):obj.getXCoord(0)-width);if(prop.grouping==='stacked'){var seq=obj.coords[i].element.getAttribute('data-sequential-index');var indexes=RG.SVG.sequentialIndexToGrouped(seq,obj.data);if(indexes[1]>0){obj.coords[i].element.setAttribute('x',parseInt(obj.coords[i-1].element.getAttribute('x'))+parseInt(obj.coords[i-1].element.getAttribute('width')));}}}}\nif(frame>=opt.frames){callback(obj);}else{RG.SVG.FX.update(iterator);}}\niterator();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.line.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Line=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));if(RG.SVG.isArray(conf.data)&&RG.SVG.isArray(conf.data[0])){this.data=RG.SVG.arrayClone(conf.data);}else if(RG.SVG.isArray(conf.data)){this.data=[RG.SVG.arrayClone(conf.data)];}else{this.data=[[]];}\nthis.type='line';this.coords=[];this.coords2=[];this.coordsSpline=[];this.hasMultipleDatasets=typeof this.data[0]==='object'&&typeof this.data[1]==='object'?true:false;this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.originalData=RG.SVG.arrayClone(this.data);this.filledGroups=[];RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundColor:null,backgroundImage:null,backgroundImageStretch:true,backgroundImageAspect:'none',backgroundImageOpacity:null,backgroundImageX:null,backgroundImageY:null,backgroundImageW:null,backgroundImageH:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,colors:['red','#0f0','blue','#ff0','#0ff','green'],filled:false,filledColors:[],filledClick:null,filledOpacity:1,filledAccumulative:false,hmargin:0,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:3,yaxisColor:'black',yaxisScale:true,yaxisLabels:null,yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisLabelsCount:5,yaxisUnitsPre:'',yaxisUnitsPost:'',yaxisStrict:false,yaxisDecimals:0,yaxisPoint:'.',yaxisThousand:',',yaxisRound:false,yaxisMax:null,yaxisMin:0,yaxisFormatter:null,xaxis:true,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisLabels:null,xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,xaxisLabelsPosition:'edge',xaxisLabelsPositionEdgeTickmarksCount:null,xaxisColor:'black',textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,linewidth:1,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'mousemove',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,tickmarksStyle:'none',tickmarksSize:5,tickmarksFill:'white',tickmarksLinewidth:1,labelsAbove:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:'rgba(255,255,255,0.7)',labelsAboveBackgroundPadding:2,labelsAboveUnitsPre:null,labelsAboveUnitsPost:null,labelsAbovePoint:null,labelsAboveThousand:null,labelsAboveFormatter:null,labelsAboveDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:-10,labelsAboveHalign:'center',labelsAboveValign:'bottom',labelsAboveSpecific:null,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,spline:false,stepped:false,title:'',titleSize:null,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:null,titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,errorbars:null,errorbarsColor:'black',errorbarsLinewidth:1,errorbarsCapwidth:10,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.coords=[];this.coords2=[];this.coordsSpline=[];this.data=RG.SVG.arrayClone(this.originalData);this.tooltipsSequentialIndex=0;this.data_seq=RG.SVG.arrayLinearize(this.data);if(prop.errorbars){for(var i=0;i<this.data_seq.length;++i){if(typeof prop.errorbars[i]==='undefined'||RG.SVG.isNull(prop.errorbars[i])){prop.errorbars[i]={max:null,min:null};}else if(typeof prop.errorbars[i]==='number'){prop.errorbars[i]={min:prop.errorbars[i],max:prop.errorbars[i]};}else if(typeof prop.errorbars[i]==='object'&&typeof prop.errorbars[i].max==='undefined'){prop.errorbars[i].max=null;}else if(typeof prop.errorbars[i]==='object'&&typeof prop.errorbars[i].min==='undefined'){prop.errorbars[i].min=null;}}}\nfor(var i=0,tmp=[];i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(typeof tmp[j]==='undefined'){tmp[j]=0;}\nif(prop.filled&&prop.filledAccumulative){tmp[j]+=this.data[i][j];if(i===(this.data.length-1)){tmp[j]+=(prop.errorbars?prop.errorbars[RG.SVG.groupedIndexToSequential({object:this,dataset:i,index:j})].max:0)}}else{tmp[j]=ma.max(tmp[j],this.data[i][j]+(prop.errorbars?prop.errorbars[RG.SVG.groupedIndexToSequential({object:this,dataset:i,index:j})].max:0));}}}\nvar values=[];for(var i=0,max=0;i<this.data.length;++i){if(RG.SVG.isArray(this.data[i])&&!prop.filledAccumulative){values.push(RG.SVG.arrayMax(tmp));}else if(RG.SVG.isArray(this.data[i])&&prop.filled&&prop.filledAccumulative){for(var j=0;j<this.data[i].length;++j){values[j]=values[j]||0;values[j]=values[j]+this.data[i][j];this.data[i][j]=values[j];}}}\nif(prop.filled&&prop.filledAccumulative){var max=RG.SVG.arrayMax(tmp)}else{var max=RG.SVG.arrayMax(values);}\nif(typeof prop.yaxisMax==='number'){max=prop.yaxisMax;}\nif(prop.yaxisMin==='mirror'){var mirrorScale=true;prop.yaxisMin=0;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:max,min:prop.yaxisMin,point:prop.yaxisPoint,round:prop.yaxisRound,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});if(mirrorScale){this.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:this.scale.max,min:this.scale.max* -1,point:prop.yaxisPoint,round:false,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});}\nthis.max=this.scale.max;this.min=this.scale.min;RG.SVG.drawBackground(this);RG.SVG.drawXAxis(this);RG.SVG.drawYAxis(this);for(var i=0;i<this.data.length;++i){this.drawLine(this.data[i],i);}\nthis.redrawLines();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nthis.drawLabelsAbove();var obj=this;document.body.addEventListener('mousedown',function(e)\n{RG.SVG.removeHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawLine=function(data,index)\n{var coords=[],path=[];for(var i=0,len=data.length;i<len;++i){var val=data[i],x=(((this.graphWidth-prop.hmargin-prop.hmargin)/(len-1))*i)+prop.gutterLeft+prop.hmargin,y=this.getYCoord(val);coords.push([x,y]);}\nfor(var i=0;i<coords.length;++i){if(i===0||RG.SVG.isNull(data[i])||RG.SVG.isNull(data[i-1])){var action='M';}else{if(prop.stepped){path.push('L {1} {2}'.format(coords[i][0],coords[i-1][1]));}\nvar action='L';}\npath.push(action+'{1} {2}'.format(coords[i][0],RG.SVG.isNull(data[i])?0:coords[i][1]));}\nfor(var k=0;k<coords.length;++k){this.coords.push(RG.SVG.arrayClone(coords[k]));this.coords[this.coords.length-1].x=coords[k][0];this.coords[this.coords.length-1].y=coords[k][1];this.coords[this.coords.length-1].object=this;this.coords[this.coords.length-1].value=data[k];this.coords[this.coords.length-1].index=k;this.coords[this.coords.length-1].path=path;}\nthis.coords2[index]=RG.SVG.arrayClone(coords);for(var k=0;k<coords.length;++k){this.coords2[index][k].x=coords[k][0];this.coords2[index][k].y=coords[k][1];this.coords2[index][k].object=this;this.coords2[index][k].value=data[k];this.coords2[index][k].index=k;this.coords2[index][k].path=path;if(prop.errorbars){this.drawErrorbar({object:this,dataset:index,index:k,x:x,y:y});}}\nif(prop.spline){this.coordsSpline[index]=this.drawSpline(coords);}\nif(prop.filled===true||(typeof prop.filled==='object'&&prop.filled[index])){if(prop.spline){var fillPath=['M{1} {2}'.format(this.coordsSpline[index][0][0],this.coordsSpline[index][0][1])];for(var i=1;i<this.coordsSpline[index].length;++i){fillPath.push('L{1} {2}'.format(this.coordsSpline[index][i][0]+((i===(this.coordsSpline[index].length)-1)?1:0),this.coordsSpline[index][i][1]));}}else{var fillPath=RG.SVG.arrayClone(path);}\nfillPath.push('L{1} {2}'.format(this.coords2[index][this.coords2[index].length-1][0]+1,index>0&&prop.filledAccumulative?(prop.spline?this.coordsSpline[index-1][this.coordsSpline[index-1].length-1][1]:this.coords2[index-1][this.coords2[index-1].length-1][1]):this.getYCoord(prop.yaxisMin>0?prop.yaxisMin:0)+(prop.xaxis?0:1)));if(index>0&&prop.filledAccumulative){var path2=RG.SVG.arrayClone(path);if(index>0&&prop.filledAccumulative){if(prop.spline){for(var i=this.coordsSpline[index-1].length-1;i>=0;--i){fillPath.push('L{1} {2}'.format(this.coordsSpline[index-1][i][0],this.coordsSpline[index-1][i][1]));}}else{for(var i=this.coords2[index-1].length-1;i>=0;--i){fillPath.push('L{1} {2}'.format(this.coords2[index-1][i][0],this.coords2[index-1][i][1]));if(prop.stepped&&i>0){fillPath.push('L{1} {2}'.format(this.coords2[index-1][i][0],this.coords2[index-1][i-1][1]));}}}}}else{fillPath.push('L{1} {2}'.format(this.coords2[index][0][0]+(prop.yaxis?1:0),this.getYCoord(prop.yaxisMin>0?prop.yaxisMin:0)+(prop.xaxis?0:1)));}\nfillPath.push('L{1} {2}'.format(this.coords2[index][0][0]+(prop.yaxis?1:0),this.coords2[index][0][1]));for(var i=0;i<this.data[index].length;++i){if(!RG.SVG.isNull(this.data[index][i])){fillPath.push('L{1} {2}'.format(this.coords2[index][i][0],this.getYCoord(0)));break;}}\nthis.filledGroups[index]=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{'class':'rgraph_filled_line_'+index}});var fillPathObject=RG.SVG.create({svg:this.svg,parent:this.filledGroups[index],type:'path',attr:{d:fillPath.join(' '),stroke:'rgba(0,0,0,0)','fill':prop.filledColors&&prop.filledColors[index]?prop.filledColors[index]:prop.colors[index],'fill-opacity':prop.filledOpacity,'stroke-width':1,'clip-path':this.isTrace?'url(#trace-effect-clip)':''}});if(prop.filledClick){var obj=this;fillPathObject.addEventListener('click',function(e)\n{prop.filledClick(e,obj,index);},false);fillPathObject.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}\nif(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nif(prop.spline){var str=['M{1} {2}'.format(this.coordsSpline[index][0][0],this.coordsSpline[index][0][1])];for(var i=1;i<this.coordsSpline[index].length;++i){str.push('L{1} {2}'.format(this.coordsSpline[index][i][0],this.coordsSpline[index][i][1]));}\nstr=str.join(' ');var line=RG.SVG.create({svg:this.svg,parent:prop.filled?this.filledGroups[index]:this.svg.all,type:'path',attr:{d:str,stroke:prop['colors'][index],'fill':'none','stroke-width':this.hasMultipleDatasets&&prop.filled&&prop.filledAccumulative?0.1:(RG.SVG.isArray(prop.linewidth)?prop.linewidth[index]:prop.linewidth+0.01),'stroke-linecap':'round','stroke-linejoin':'round',filter:prop.shadow?'url(#dropShadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}else{var path2=RG.SVG.arrayClone(path);if(prop.filled&&prop.filledAccumulative&&index>0){for(var i=this.coords2[index-1].length-1;i>=0;--i){path2.push('L{1} {2}'.format(this.coords2[index-1][i][0],this.coords2[index-1][i][1]));}}\npath2=path2.join(' ');var line=RG.SVG.create({svg:this.svg,parent:prop.filled?this.filledGroups[index]:this.svg.all,type:'path',attr:{d:path2,stroke:prop.colors[index],'fill':'none','stroke-width':this.hasMultipleDatasets&&prop.filled&&prop.filledAccumulative?0.1:(RG.SVG.isArray(prop.linewidth)?prop.linewidth[index]:prop.linewidth+0.01),'stroke-linecap':'round','stroke-linejoin':'round',filter:prop.shadow?'url(#dropShadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}\nif(prop.tooltips&&prop.tooltips.length){if(!this.svg.all.line_tooltip_hotspots){var group=RG.SVG.create({svg:this.svg,type:'g',attr:{'fill':'transparent',className:\"rgraph_hotspots\"},style:{cursor:'pointer'}});this.svg.all.line_tooltip_hotspots=group;}else{group=this.svg.all.line_tooltip_hotspots;}\nfor(var i=0;i<this.coords2[index].length&&this.tooltipsSequentialIndex<prop.tooltips.length;++i,++this.tooltipsSequentialIndex){if(!RG.SVG.isNull(this.originalData[index][i])&&prop.tooltips[this.tooltipsSequentialIndex]&&this.coords2[index][i][0]&&this.coords2[index][i][1]){var hotspot=RG.SVG.create({svg:this.svg,parent:group,type:'circle',attr:{cx:this.coords2[index][i][0],cy:this.coords2[index][i][1],r:10,fill:'transparent','data-dataset':index,'data-index':i},style:{cursor:'pointer'}});var obj=this;(function(sequentialIndex)\n{hotspot.addEventListener(prop.tooltipsEvent,function(e)\n{var indexes=RG.SVG.sequentialIndexToGrouped(sequentialIndex,obj.data),index=indexes[1],dataset=indexes[0];if(RG.SVG.REG.get('tooltip')&&RG.SVG.REG.get('tooltip').__index__===index&&RG.SVG.REG.get('tooltip').__dataset__===dataset){return;}\nobj.removeHighlight();RG.SVG.hideTooltip();if(prop.tooltips[sequentialIndex]){var text=prop.tooltips[sequentialIndex];}\nRG.SVG.tooltip({object:obj,index:index,dataset:dataset,sequentialIndex:sequentialIndex,text:text,event:e});var outer_highlight1=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'circle',attr:{cx:obj.coords2[dataset][index][0],cy:obj.coords2[dataset][index][1],r:5,fill:obj.properties.colors[dataset],'fill-opacity':0.5},style:{cursor:'pointer'}});var outer_highlight2=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'circle',attr:{cx:obj.coords2[dataset][index][0],cy:obj.coords2[dataset][index][1],r:14,fill:'white','fill-opacity':0.75},style:{cursor:'pointer'}});var inner_highlight1=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'circle',attr:{cx:obj.coords2[dataset][index][0],cy:obj.coords2[dataset][index][1],r:6,fill:'white'},style:{cursor:'pointer'}});var inner_highlight2=RG.SVG.create({svg:obj.svg,parent:obj.svg.all,type:'circle',attr:{cx:obj.coords2[dataset][index][0],cy:obj.coords2[dataset][index][1],r:5,fill:obj.properties.colors[dataset]},style:{cursor:'pointer'}});RG.SVG.REG.set('highlight',[outer_highlight1,outer_highlight2,inner_highlight1,inner_highlight2]);},false);})(this.tooltipsSequentialIndex);}}}};this.drawTickmarks=function(index,data,coords)\n{var style=typeof prop.tickmarksStyle==='object'?prop.tickmarksStyle[index]:prop.tickmarksStyle,size=typeof prop.tickmarksSize==='object'?prop.tickmarksSize[index]:prop.tickmarksSize,fill=typeof prop.tickmarksFill==='object'?prop.tickmarksFill[index]:prop.tickmarksFill,linewidth=typeof prop.tickmarksLinewidth==='object'?prop.tickmarksLinewidth[index]:prop.tickmarksLinewidth;for(var i=0;i<data.length;++i){if(typeof data[i]==='number'){switch(style){case'filledcircle':case'filledendcircle':if(style==='filledcircle'||(i===0||i===data.length-1)){var circle=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'circle',attr:{cx:coords[index][i][0],cy:coords[index][i][1],r:size,'fill':prop.colors[index],filter:prop.shadow?'url(#dropShadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}\nbreak;case'circle':case'endcircle':if(style==='circle'||(style==='endcircle'&&(i===0||i===data.length-1))){var outerCircle=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'circle',attr:{cx:coords[index][i][0],cy:coords[index][i][1],r:size+linewidth,'fill':prop.colors[index],filter:prop.shadow?'url(#dropShadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});var innerCircle=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'circle',attr:{cx:coords[index][i][0],cy:coords[index][i][1],r:size,'fill':fill,'clip-path':this.isTrace?'url(#trace-effect-clip)':''}});break;}\nbreak;case'endrect':case'rect':if(style==='rect'||(style==='endrect'&&(i===0||i===data.length-1))){var fill=typeof fill==='object'&&typeof fill[index]==='string'?fill[index]:fill;var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:coords[index][i][0]-size,y:coords[index][i][1]-size,width:size+size+linewidth,height:size+size+linewidth,'stroke-width':linewidth,'stroke':prop.colors[index],'fill':fill,'clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}\nbreak;case'filledendrect':case'filledrect':if(style==='filledrect'||(style==='filledendrect'&&(i===0||i===data.length-1))){var fill=prop.colors[index];var rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',attr:{x:coords[index][i][0]-size,y:coords[index][i][1]-size,width:size+size+linewidth,height:size+size+linewidth,'fill':fill,'clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}}}}};this.redrawLines=function()\n{if(prop.spline){for(var i=0;i<this.coordsSpline.length;++i){var linewidth=RG.SVG.isArray(prop.linewidth)?prop.linewidth[i]:prop.linewidth,color=prop['colors'][i],path='';for(var j=0;j<this.coordsSpline[i].length;++j){if(j===0){path+='M{1} {2} '.format(this.coordsSpline[i][j][0],this.coordsSpline[i][j][1]);}else{path+='L{1} {2} '.format(this.coordsSpline[i][j][0],this.coordsSpline[i][j][1]);}}\nRG.SVG.create({svg:this.svg,parent:prop.filled?this.filledGroups[i]:this.svg.all,type:'path',attr:{d:path,stroke:color,'fill':'none','stroke-width':linewidth+0.01,'stroke-linecap':'round','stroke-linejoin':'round',filter:prop.shadow?'url(#dropShadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}\nfor(var dataset=0;dataset<this.coords2.length;++dataset){this.drawTickmarks(dataset,this.data[dataset],this.coords2);}}else{for(var i=0;i<this.coords2.length;++i){var linewidth=RG.SVG.isArray(prop.linewidth)?prop.linewidth[i]:prop.linewidth,color=prop['colors'][i],path='';for(var j=0;j<this.coords2[i].length;++j){if(j===0||RG.SVG.isNull(this.data[i][j])||RG.SVG.isNull(this.data[i][j-1])){path+='M{1} {2} '.format(this.coords2[i][j][0],RG.SVG.isNull(this.data[i][j])?0:this.coords2[i][j][1]);}else{if(prop.stepped){path+='L{1} {2} '.format(this.coords2[i][j][0],this.coords2[i][j-1][1]);}\npath+='L{1} {2} '.format(this.coords2[i][j][0],this.coords2[i][j][1]);}}\nRG.SVG.create({svg:this.svg,parent:prop.filled?this.filledGroups[i]:this.svg.all,type:'path',attr:{d:path,stroke:color,'fill':'none','stroke-width':linewidth+0.01,'stroke-linecap':'round','stroke-linejoin':'round',filter:prop.shadow?'url(#dropshadow)':'','clip-path':this.isTrace?'url(#trace-effect-clip)':''}});}\nfor(var dataset=0;dataset<this.coords2.length;++dataset){this.drawTickmarks(dataset,this.data[dataset],this.coords2);}}};this.getYCoord=function(value)\n{var prop=this.properties,y;if(value>this.scale.max){return null;}\nif(value<this.scale.min){return null;}\ny=((value-this.scale.min)/(this.scale.max-this.scale.min));y*=(this.height-prop.gutterTop-prop.gutterBottom);y=this.height-prop.gutterBottom-y;return y;};this.highlight=function(rect)\n{var x=rect.getAttribute('x'),y=rect.getAttribute('y');};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}else if(highlight){for(var i=0;i<highlight.length;++i){if(highlight[i]&&highlight[i].parentNode){highlight[i].parentNode.removeChild(highlight[i]);}}}\nRG.SVG.REG.set('highlight',null);};this.drawSpline=function(coords)\n{var xCoords=[];gutterLeft=prop.gutterLeft,gutterRight=prop.gutterRight,hmargin=prop.hmargin,interval=(this.graphWidth-(2*hmargin))/(coords.length-1),coordsSpline=[];for(var i=0,len=coords.length;i<len;i+=1){if(typeof coords[i]=='object'&&coords[i]&&coords[i].length==2){coords[i]=Number(coords[i][1]);}}\nvar P=[coords[0]];for(var i=0;i<coords.length;++i){P.push(coords[i]);}\nP.push(coords[coords.length-1]+(coords[coords.length-1]-coords[coords.length-2]));for(var j=1;j<P.length-2;++j){for(var t=0;t<10;++t){var yCoord=spline(t/10,P[j-1],P[j],P[j+1],P[j+2]);xCoords.push(((j-1)*interval)+(t*(interval/10))+gutterLeft+hmargin);coordsSpline.push([xCoords[xCoords.length-1],yCoord]);if(typeof index==='number'){coordsSpline[index].push([xCoords[xCoords.length-1],yCoord]);}}}\ncoordsSpline.push([((j-1)*interval)+gutterLeft+hmargin,P[j]]);if(typeof index==='number'){coordsSpline.push([((j-1)*interval)+gutterLeft+hmargin,P[j]]);}\nfunction spline(t,P0,P1,P2,P3)\n{return 0.5*((2*P1)+\n((0-P0)+P2)*t+\n((2*P0-(5*P1)+(4*P2)-P3)*(t*t)+\n((0-P0)+(3*P1)-(3*P2)+P3)*(t*t*t)));}\nfor(var i=0;i<coordsSpline.length;++i){coordsSpline[i].object=this;coordsSpline[i].x=this;coordsSpline[i].y=this;}\nreturn coordsSpline;};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),filledColors:RG.SVG.arrayClone(prop.filledColors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i]});}}\nvar filledColors=prop.filledColors;if(filledColors){for(var i=0;i<filledColors.length;++i){filledColors[i]=RG.SVG.parseColorLinear({object:this,color:filledColors[i]});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor});};this.drawLabelsAbove=function()\n{if(prop.labelsAbove){var data_seq=RG.SVG.arrayLinearize(this.data),seq=0;for(var dataset=0;dataset<this.coords2.length;++dataset,seq++){for(var i=0;i<this.coords2[dataset].length;++i,seq++){var str=RG.SVG.numberFormat({object:this,num:this.data[dataset][i].toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[seq]==='string'||typeof prop.labelsAboveSpecific[seq]==='number')){str=prop.labelsAboveSpecific[seq];}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[seq]!=='string'&&typeof prop.labelsAboveSpecific[seq]!=='number'){continue;}\nRG.SVG.text({object:this,parent:this.svg.all,tag:'labels.above',text:str,x:parseFloat(this.coords2[dataset][i][0])+prop.labelsAboveOffsetx,y:parseFloat(this.coords2[dataset][i][1])+prop.labelsAboveOffsety,halign:prop.labelsAboveHalign,valign:prop.labelsAboveValign,font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:prop.labelsAboveBold||prop.textBold,italic:prop.labelsAboveItalic||prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground||null,padding:prop.labelsAboveBackgroundPadding||0});}\nseq--;}}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.drawErrorbar=function(opt)\n{var linewidth=RG.SVG.getErrorbarsLinewidth({object:this,index:opt.index}),color=RG.SVG.getErrorbarsColor({object:this,index:opt.index}),capwidth=RG.SVG.getErrorbarsCapWidth({object:this,index:opt.index}),index=opt.index,dataset=opt.dataset,x=opt.x,y=opt.y,value=this.data[dataset][index],seq=RG.SVG.groupedIndexToSequential({dataset:dataset,index:index,object:this});var y=this.getYCoord(y);var max=RG.SVG.getErrorbarsMaxValue({object:this,index:seq});var min=RG.SVG.getErrorbarsMinValue({object:this,index:seq});if(!max&&!min){return;}\nvar x=this.coords2[dataset][index].x,y=this.coords2[dataset][index].y,halfCapWidth=capwidth/2,y1=this.getYCoord(value+max),y3=this.getYCoord(value-min)===null?y:this.getYCoord(value-min);if(max>0){var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x,y1:y,x2:x,y2:y1,stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x-halfCapWidth,y1:y1,x2:x+halfCapWidth,y2:y1,stroke:color,'stroke-width':linewidth}});}\nif(typeof min==='number'){var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x,y1:y,x2:x,y2:y3,stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x-halfCapWidth,y1:y3,x2:x+halfCapWidth,y2:y3,stroke:color,'stroke-width':linewidth}});}};this.trace=function()\n{var opt=arguments[0]||{},frame=1,frames=opt.frames||60,obj=this;this.isTrace=true;this.draw();var clippath=RG.SVG.create({svg:this.svg,parent:this.svg.defs,type:'clipPath',attr:{id:'trace-effect-clip'}});var clippathrect=RG.SVG.create({svg:this.svg,parent:clippath,type:'rect',attr:{x:0,y:0,width:0,height:this.height}});var iterator=function()\n{var width=(frame++)/frames*obj.width;clippathrect.setAttribute(\"width\",width);if(frame<=frames){RG.SVG.FX.update(iterator);}else{clippath.parentNode.removeChild(clippath);if(opt.callback){(opt.callback)(obj);}}};iterator();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}}\nreturn this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.pie.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Pie=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=conf.data;this.type='pie';this.angles=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes=[];this.shadowNodes=[];RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={centerx:null,centery:null,radius:null,gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,colors:['#f66','#6f6','#66f','#ff6','#6ff','#ccc','pink','orange','cyan','maroon','olive','teal'],strokestyle:'rgba(0,0,0,0)',margin:3,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labels:[],labelsSticks:true,labelsSticksHlength:50,linewidth:1,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,highlightStyle:'normal',highlightStyleOutlineWidth:7,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,exploded:0,roundRobinMultiplier:1,donut:false,donutWidth:75,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.angles=[];this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.centerx=(this.graphWidth/2)+prop.gutterLeft;this.centery=(this.graphHeight/2)+prop.gutterTop;this.radius=ma.min(this.graphWidth,this.graphHeight)/2;this.centerx=typeof prop.centerx==='number'?prop.centerx:this.centerx;this.centery=typeof prop.centery==='number'?prop.centery:this.centery;this.radius=typeof prop.radius==='number'?prop.radius:this.radius;if(typeof prop.radius==='string'&&prop.radius.match(/^\\+|-\\d+$/))this.radius+=parseFloat(prop.radius);if(typeof prop.centerx==='string'&&prop.centerx.match(/^\\+|-\\d+$/))this.centerx+=parseFloat(prop.centerx);if(typeof prop.centery==='string'&&prop.centery.match(/^\\+|-\\d+$/))this.centery+=parseFloat(prop.centery);RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.max=RG.SVG.arrayMax(this.data);this.total=RG.SVG.arraySum(this.data);if(typeof prop.exploded==='number'&&prop.exploded>0){var val=prop.exploded;prop.exploded=[];for(var i=0;i<this.data.length;++i){prop.exploded[i]=val;}}\nthis.drawSegments({shadow:true});RG.SVG.drawTitle(this);if(prop.labelsSticks){this.drawLabelsSticks();}else{this.drawLabels();}\nthis.drawIngraphLabels();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nvar obj=this;document.body.addEventListener('mousedown',function(e)\n{RG.SVG.removeHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawSegments=function(opt)\n{var start=0,end=0,angle=0,sum=RG.SVG.arraySum(this.data),segment=0;for(var i=0,len=this.data.length;i<len;++i){var value=this.data[i]*prop.roundRobinMultiplier;start=angle;segment=((value/sum)*RG.SVG.TRIG.TWOPI);end=start+segment;var explosion=RG.SVG.TRIG.getRadiusEndPoint({angle:start+(segment/2),r:prop.exploded[i]});var explosionX=explosion[1],explosionY=explosion[0];this.angles[i]={start:start,end:end,angle:end-start,halfway:((end-start)/2)+start,cx:this.centerx+(parseFloat(explosionX)||0),cy:this.centery-(parseFloat(explosionY)||0),radius:this.radius,object:this};angle+=(end-start);}\nif(opt.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nfor(var i=0;i<this.angles.length;++i){var path=RG.SVG.TRIG.getArcPath({cx:this.angles[i].cx,cy:this.angles[i].cy,r:this.radius,start:this.angles[i].start,end:this.angles[i].end});if(prop.donut){var donutWidth=prop.donutWidth;var donut_path=RG.SVG.TRIG.getArcPath3({cx:this.angles[i].cx,cy:this.angles[i].cy,r:this.radius-donutWidth,start:this.angles[i].end,end:this.angles[i].start,moveto:false,anticlockwise:true});var xy=RG.SVG.TRIG.getRadiusEndPoint({angle:this.angles[i].end-RG.SVG.TRIG.HALFPI,r:this.radius-donutWidth});path=path\n+\" L {1} {2} \".format(xy[0]+this.angles[i].cx,xy[1]+this.angles[i].cy)\n+donut_path\n+\" Z\";}else{path=path+\" L {1} {2} \".format(this.angles[i].cx,this.angles[i].cy)+\" Z\"}\nvar arc=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:path,fill:prop.colors[i],stroke:prop.strokestyle,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-index':i,'data-value':value,'data-start-angle':this.angles[i].start,'data-end-angle':this.angles[i].end,'data-radius':this.radius,filter:(prop.shadow&&opt.shadow)?'url(#dropShadow)':''}});this.angles[i].element=arc;if(prop.shadow&&opt.shadow){this.shadowNodes[i]=arc;}else{this.nodes[i]=arc;}\nif(prop.tooltips&&prop.tooltips[i]&&(!opt.shadow||!prop.shadow)){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\n(function(index,obj)\n{arc.addEventListener(prop.tooltipsEvent,function(e)\n{var tooltip=RG.SVG.REG.get('tooltip');if(tooltip&&prop.tooltipsEvent==='mousemove'&&index===tooltip.__index__){return;}\nobj.removeHighlight();RG.SVG.tooltip({object:obj,index:index,sequentialIndex:index,text:prop.tooltips[index],event:e});obj.highlight(e.target);var highlight=RG.SVG.REG.get('highlight');if(prop.tooltipsEvent==='mousemove'){highlight.style.cursor='pointer';}},false);if(prop.tooltipsEvent==='click'){arc.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(i,this));}}\nif(prop.shadow&&opt.shadow){this.redrawSegments();}};this.redrawSegments=function()\n{this.drawSegments({shadow:false});};this.drawLabels=function()\n{var angles=this.angles,prop=this.properties,labels=prop.labels;for(var i=0;i<angles.length;++i){var endpoint=RG.SVG.TRIG.getRadiusEndPoint({angle:angles[i].halfway-RG.SVG.TRIG.HALFPI,r:angles[i].radius+15});var x=endpoint[0]+angles[i].cx,y=endpoint[1]+angles[i].cy,valign,halign;if(angles[i].halfway>0&&angles[i].halfway<RG.SVG.TRIG.HALFPI){halign='left';valign='bottom';}else if(angles[i].halfway>RG.SVG.TRIG.HALFPI&&angles[i].halfway<RG.SVG.TRIG.PI){halign='left';valign='top';}else if(angles[i].halfway>RG.SVG.TRIG.PI&&angles[i].halfway<(RG.SVG.TRIG.HALFPI+RG.SVG.TRIG.PI)){halign='right';valign='top';}else if(angles[i].halfway>(RG.SVG.TRIG.HALFPI+RG.SVG.TRIG.PI)&&angles[i].halfway<RG.SVG.TRIG.TWOPI){halign='right';valign='top';}\nRG.SVG.text({object:this,parent:this.svg.all,tag:'labels',text:typeof labels[i]==='string'?labels[i]:'',font:prop.textFont,size:prop.textSize,x:x,y:y,valign:valign,halign:halign,bold:prop.textBold,italic:prop.textItalic,color:prop.textColor});}};this.drawIngraphLabels=function()\n{if(prop.labelsIngraph){for(var i=0;i<this.angles.length;++i){var halign=prop.labelsIngraphHalign||'center',valign=prop.labelsIngraphValign||'center',font=prop.labelsIngraphFont||prop.textFont,size=prop.labelsIngraphSize||prop.textSize,italic=typeof prop.labelsIngraphItalic==='boolean'?prop.labelsIngraphItalic:prop.textItalic,bold=typeof prop.labelsIngraphBold==='boolean'?prop.labelsIngraphBold:prop.textBold,color=prop.labelsIngraphColor||prop.textColor,bgcolor=prop.labelsIngraphBackground||'transparent',decimals=prop.labelsIngraphDecimals||0,padding=typeof prop.labelsIngraphBackground==='string'?3:0;var xy=RG.SVG.TRIG.getRadiusEndPoint({angle:this.angles[i].halfway-RG.SVG.TRIG.HALFPI,r:this.angles[i].radius*(typeof prop.labelsIngraphRadiusPos==='number'?prop.labelsIngraphRadiusPos:0.5)});if(typeof prop.labelsIngraphSpecific==='object'&&prop.labelsIngraphSpecific){if(typeof prop.labelsIngraphSpecific[i]==='string'){var str=prop.labelsIngraphSpecific[i];}else{var str='';}}else{if(typeof prop.labelsIngraphFormatter==='function'){var str=prop.labelsIngraphFormatter({object:this,number:this.data[i].toFixed(decimals)})}else{var str=RG.SVG.numberFormat({prepend:prop.labelsIngraphUnitsPre,append:prop.labelsIngraphUnitsPost,point:prop.labelsIngraphPoint,thousand:prop.labelsIngraphThousand,num:this.data[i].toFixed(decimals),object:this});}}\nRG.SVG.text({object:this,parent:this.svg.all,tag:'labels.ingraph',x:this.angles[i].cx+xy[0],y:this.angles[i].cy+xy[1],text:str,halign:halign,valign:valign,font:font,size:size,bold:bold,italic:italic,color:color,background:bgcolor,padding:padding});}}};this.drawLabelsSticks=function()\n{var labels_right=[],labels_left=[],labels_coords=[];for(var i=0;i<this.angles.length;++i){var angle=(this.angles[i].start+((this.angles[i].end-this.angles[i].start)/2))-RGraph.SVG.TRIG.HALFPI,endpoint_inner=RG.SVG.TRIG.getRadiusEndPoint({angle:angle,r:this.radius+5}),endpoint_outer=RG.SVG.TRIG.getRadiusEndPoint({angle:angle,r:this.radius+50}),explosion=[(typeof prop.exploded==='number'?prop.exploded:prop.exploded[i]),ma.cos(angle)*(typeof prop.exploded==='number'?prop.exploded:prop.exploded[i]),ma.sin(angle)*(typeof prop.exploded==='number'?prop.exploded:prop.exploded[i])];labels_coords[i]=[];var labels={};if(angle>RG.SVG.TRIG.HALFPI){var index=labels_left.length;labels_left[index]=[];labels_left[index].text=prop.labels[i];labels_left[index].halign='right';labels=labels_left;labels_coords[i].halign='right';}else{var index=labels_right.length;labels_right[index]=[];labels_right[index].text=prop.labels[i];labels_right[index].halign='right';labels=labels_right;labels_coords[i].halign='left';}\nendpoint_inner[0]+=(explosion[1]||0);endpoint_inner[1]+=(explosion[2]||0);endpoint_outer[0]+=(explosion[1]||0);endpoint_outer[1]+=(explosion[2]||0);var x,y;if(labels[index].text){var stick=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:'M {1} {2} L {3} {4}'.format(this.centerx+endpoint_inner[0],this.centery+endpoint_inner[1],this.centerx+endpoint_outer[0],this.centery+endpoint_outer[1]),stroke:'#999',fill:'rgba(0,0,0,0)'}});}\nif(stick){labels[index].stick=stick;}\nx=(this.centerx+endpoint_outer[0]+(angle>1.57?-50:50));y=(this.centery+endpoint_outer[1]);labels_coords[i].x=x;labels_coords[i].y=y;labels_coords[i].text=prop.labels[i];}\nvar vspace_right=(this.height-prop.gutterTop-prop.gutterBottom)/labels_right.length;var vspace_left=(this.height-prop.gutterTop-prop.gutterBottom)/labels_left.length;x=y=0;for(var i=0;i<labels_right.length;++i){if(labels_right[i]&&labels_right[i].text){x=this.centerx+this.radius+100;y=prop.gutterTop+(vspace_right*i)+(vspace_right/2);RGraph.SVG.text({object:this,parent:this.svg.all,tag:'labels.sticks',text:typeof labels_right[i].text==='string'?labels_right[i].text:'',font:prop.textFont,size:prop.textSize,x:x,y:y,valign:'center',halign:labels_right[i].text,bold:prop.textBold,italic:prop.textItalic,color:prop.textColor});var str=labels_right[i].stick.getAttribute('d').replace(/ L /,' Q ')+' {1} {2}';labels_right[i].stick.setAttribute('d',str.format(x-5,y));}}\nfor(var i=0;i<labels_left.length;++i){if(labels_left[i]&&labels_left[i].text){x=this.centerx-this.radius-100;y=this.height-(prop.gutterTop+(vspace_left*i)+(vspace_left/2));RGraph.SVG.text({object:this,parent:this.svg.all,tag:'labels.sticks',text:typeof labels_left[i].text==='string'?labels_left[i].text:'',font:prop.textFont,size:prop.textSize,x:x-7,y:y,valign:'center',halign:labels_left[i].halign,bold:prop.textBold,italic:prop.textItalic,color:prop.textColor});var str=labels_left[i].stick.getAttribute('d').replace(/ L /,' Q ')+' {1} {2}';labels_left[i].stick.setAttribute('d',str.format(x-5,y));}}};this.highlight=function(segment)\n{if(prop.highlightStyle==='outline'){var index=segment.getAttribute('data-index');var path=RGraph.SVG.TRIG.getArcPath3({start:this.angles[index].start,end:this.angles[index].end,cx:this.angles[index].cx,cy:this.angles[index].cy,r:this.angles[index].radius+2,anticlockwise:false,lineto:false});path+=RGraph.SVG.TRIG.getArcPath3({start:this.angles[index].end,end:this.angles[index].start,cx:this.angles[index].cx,cy:this.angles[index].cy,r:this.angles[index].radius+2+prop.highlightStyleOutlineWidth,anticlockwise:true});var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:path,fill:prop.colors[index],stroke:'transparent'},style:{pointerEvents:'none'}});}else{var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:segment.getAttribute('d'),fill:prop.highlightFill,stroke:prop.highlightStroke,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});}\nif(prop.tooltipsEvent==='mousemove'){highlight.addEventListener('mouseout',function(e)\n{highlight.parentNode.removeChild(highlight);RG.SVG.hideTooltip();RG.SVG.REG.set('highlight',null);},false);}\nRG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),highlightFill:RG.SVG.arrayClone(prop.highlightFill)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorRadial({object:this,color:colors[i]});}}\nprop.highlightFill=RG.SVG.parseColorRadial({object:this,color:prop.highlightFill});};this.roundRobin=function()\n{var obj=this,opt=arguments[0]||{},data=RG.SVG.arrayClone(this.data),prop=this.properties,frame=1,frames=opt.frames||30,callback=typeof opt.callback==='function'?opt.callback:function(){},dataSum=RG.SVG.arraySum(this.data),textColor=prop.textColor,ingraph=prop.labelsIngraph,multiplier=0;prop.textColor='rgba(0,0,0,0)';prop.labelsIngraph=false;obj.draw();var angles=RG.SVG.arrayClone(this.angles);function iterator()\n{multiplier=(1/frames)*frame++;for(var i=0;i<angles.length;++i){var value=obj.data[i];obj.angles[i].start=angles[i].start*multiplier;obj.angles[i].end=angles[i].end*multiplier;var segment=((obj.angles[i].end-obj.angles[i].start)/2),explodedX=ma.cos(obj.angles[i].start+segment-RG.SVG.TRIG.HALFPI)*(prop.exploded[i]||0),explodedY=ma.sin(obj.angles[i].start+segment-RG.SVG.TRIG.HALFPI)*(prop.exploded[i]||0);var path=RG.SVG.TRIG.getArcPath({cx:obj.centerx+explodedX,cy:obj.centery+explodedY,r:obj.radius,start:obj.angles[i].start,end:obj.angles[i].end});if(prop.donut){var donutWidth=prop.donutWidth;var donut_path=RG.SVG.TRIG.getArcPath3({cx:obj.angles[i].cx,cy:obj.angles[i].cy,r:obj.radius-donutWidth,start:obj.angles[i].end,end:obj.angles[i].start,moveto:false,anticlockwise:true});var xy=RG.SVG.TRIG.getRadiusEndPoint({angle:obj.angles[i].end-RG.SVG.TRIG.HALFPI,r:obj.radius-donutWidth});path=path\n+\" L {1} {2} \".format(xy[0]+obj.angles[i].cx,xy[1]+obj.angles[i].cy)\n+donut_path\n+\" Z\";}else{path=path+\" L {1} {2} \".format(obj.angles[i].cx,obj.angles[i].cy)+\" Z\"}\npath=path+\" L {1} {2} Z\".format(obj.centerx+explodedX,obj.centery+explodedY);if(obj.shadowNodes&&obj.shadowNodes[i]){obj.shadowNodes[i].setAttribute('d',path);}\nobj.nodes[i].setAttribute('d',path);}\nif(frame<=frames){RG.SVG.FX.update(iterator);}else{prop.textColor=textColor;prop.labelsIngraph=ingraph;RG.SVG.redraw(obj.svg);callback(obj);}}\niterator();return this;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.radar.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Radar=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(conf.data);this.originalData=RG.SVG.arrayClone(conf.data);this.type='radar';this.coords=[];this.coords2=[];this.angles=[];this.angles2=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes=[];this.shadowNodes=[];this.max=0;this.redraw=false;this.highlight_node=null;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={centerx:null,centery:null,radius:null,gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridRadialsCount:null,backgroundGridConcentricsCount:5,backgroundGridLinewidth:1,backgroundGridPoly:true,colors:['red','black','orange','green','#6ff','#ccc','pink','orange','cyan','maroon','olive','teal'],filled:false,filledOpacity:0.25,filledAccumulative:true,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labels:[],scaleVisible:true,scaleUnitsPre:'',scaleUnitsPost:'',scaleMax:null,scaleMin:0,scalePoint:'.',scaleThousand:',',scaleRound:false,scaleDecimals:0,scaleFormatter:null,scaleBold:null,scaleItalic:null,scaleColor:null,scaleSize:null,scaleFont:null,scaleLabelsCount:5,linewidth:1,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'mousemove',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,tickmarks:'circle',tickmarksLinewidth:1,tickmarksSize:6,tickmarksFill:'white',title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,grouping:'normal',shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(this.originalData);if(this.data.length>1){var len=this.data[0].length;for(var i=1;i<this.data.length;++i){if(this.data[i].length!==len){alert('[ERROR] The Radar chart datasets must have the same number of elements!');}}}\nthis.angles=[];this.angles2=[];this.coords=[];this.coords2=[];RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.centerx=(this.graphWidth/2)+prop.gutterLeft;this.centery=(this.graphHeight/2)+prop.gutterTop;this.radius=ma.min(this.graphWidth,this.graphHeight)/2;this.centerx=typeof prop.centerx==='number'?prop.centerx:this.centerx;this.centery=typeof prop.centery==='number'?prop.centery:this.centery;this.radius=typeof prop.radius==='number'?prop.radius:this.radius;if(typeof prop.radius==='string'&&prop.radius.match(/^\\+|-\\d+$/))this.radius+=parseFloat(prop.radius);if(typeof prop.centerx==='string'&&prop.centerx.match(/^\\+|-\\d+$/))this.centery+=parseFloat(prop.centerx);if(typeof prop.centery==='string'&&prop.centery.match(/^\\+|-\\d+$/))this.centerx+=parseFloat(prop.centery);if(RG.SVG.isArray(this.data)&&(typeof this.data[0]==='number'||typeof this.data[0]==='string')){this.data=[this.data];}\nfor(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j]==='string'){this.data[i][j]=RG.SVG.stringsToNumbers(this.data[i][j]);}}}\nif(prop.filled&&prop.filledAccumulative){for(var dataset=1;dataset<this.data.length;++dataset){for(var i=0;i<this.data[dataset].length;++i){this.data[dataset][i]+=this.data[dataset-1][i];}}}\nthis.getMaxValue();RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.scale=RG.SVG.getScale({object:this,numlabels:typeof prop.scaleLabelsCount==='number'?prop.scaleLabelsCount:prop.backgroundGridConcentricCount,unitsPre:prop.scaleUnitsPre,unitsPost:prop.scaleUnitsPost,max:typeof prop.scaleMax==='number'?prop.scaleMax:this.max,min:prop.scaleMin,point:prop.scalePoint,round:prop.scaleRound,thousand:prop.scaleThousand,decimals:prop.scaleDecimals,strict:typeof prop.scaleMax==='number',formatter:prop.scaleFormatter});this.max=this.scale.max;this.drawBackground();this.drawRadar();this.drawTickmarks();this.drawLabels();RG.SVG.drawTitle(this);this.addTooltipHotspots();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.attribution(this);if(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nvar obj=this;doc.body.addEventListener('mousedown',function(e)\n{obj.hideHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBackground=function()\n{if(prop.backgroundGrid){var grid=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'g',attr:{className:'rgraph_radar_grid',fill:'rgba(0,0,0,0)',stroke:prop.backgroundGridColor}});var origin=0-(RG.SVG.TRIG.PI/2),radials=(typeof prop.backgroundGridRadialsCount==='number'?prop.backgroundGridRadialsCount:this.data[0].length),concentrics=prop.backgroundGridConcentricsCount,step=RG.SVG.TRIG.TWOPI/radials;if(radials>0){for(var i=0,len=radials;i<len;++i){var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius,angle:origin+(i*step)});var str='M {1} {2} L {3} {4}'.format(this.centerx,this.centery,coords.x,coords.y);RG.SVG.create({svg:this.svg,type:'path',parent:grid,attr:{d:str,stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});}}\nif(concentrics>0){if(prop.backgroundGridPoly){for(var j=1;j<=concentrics;j++){for(var i=0,len=radials,path=[];i<len;++i){var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius*(j/concentrics),angle:origin+(i*step)});path.push('{1} {2} {3}'.format(i===0?'M':'L',coords.x,coords.y));}\nRG.SVG.create({svg:this.svg,type:'path',parent:grid,attr:{d:path.join(' ')+' z',fill:'transparent',stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});}}else{for(var j=1;j<=concentrics;j++){RG.SVG.create({svg:this.svg,type:'circle',parent:grid,attr:{cx:this.centerx,cy:this.centery,r:this.radius*(j/concentrics),fill:'transparent',stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});}}}}};this.drawRadar=function(opt)\n{for(var dataset=0,len=this.data.length;dataset<len;++dataset){this.coords2[dataset]=[];this.angles2[dataset]=[];var path=[];for(var i=0,len2=this.data[dataset].length;i<len2;++i){var value=this.data[dataset][i];var xy=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.getRadius(this.data[dataset][i]),angle:(RG.SVG.TRIG.TWOPI/len2)*i-RG.SVG.TRIG.HALFPI});xy.r=(((value-prop.scaleMin)/(this.max-prop.scaleMin)))*this.radius;xy.angle=(RG.SVG.TRIG.TWOPI/len2)*i-RG.SVG.TRIG.HALFPI;path.push('{1}{2} {3}'.format(i===0?'M':'L',xy.x,xy.y));this.angles.push({object:this,dataset:dataset,index:i,x:xy.x,y:xy.y,cx:this.centerx,cy:this.centery,r:xy.r,angle:xy.angle});this.angles2[dataset].push({object:this,dataset:dataset,index:i,x:xy.x,y:xy.y,cx:this.centerx,cy:this.centery,r:xy.r,angle:xy.angle});this.coords.push([xy.x,xy.y]);this.coords2[dataset].push([xy.x,xy.y]);}\nif(dataset>0&&prop.filled&&prop.filledAccumulative){path.push('L {1} {2}'.format(this.coords2[dataset][0][0],this.coords2[dataset][0][1]));path.push('M {1} {2}'.format(this.coords2[dataset-1][0][0],this.coords2[dataset-1][0][1]));for(var i=this.coords2[dataset-1].length-1;i>=0;--i){path.push('L {1} {2}'.format(this.coords2[dataset-1][i][0],this.coords2[dataset-1][i][1]));}\nthis.redraw=true;}else{path.push('z');}\nvar path=RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:path.join(\" \"),stroke:prop.colors[dataset],fill:prop.filled?prop.colors[dataset]:'transparent','fill-opacity':prop.filledOpacity,'stroke-width':prop.linewidth,'clip-path':this.isTrace?'url(#trace-effect-clip)':'',filter:prop.shadow?'url(#dropShadow)':'',}});path.setAttribute('data-dataset',dataset);}\nthis.redrawRadar();};this.redrawRadar=function()\n{if(this.redraw){this.redraw=false;for(var dataset=0;dataset<this.coords2.length;++dataset){var path=[];for(var i=0;i<this.coords2[dataset].length;++i){if(i===0){path.push('M {1} {2}'.format(this.coords2[dataset][i][0],this.coords2[dataset][i][1]));}else{path.push('L {1} {2}'.format(this.coords2[dataset][i][0],this.coords2[dataset][i][1]))}}\npath.push('z')\nRG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:path.join(\" \"),stroke:prop.colors[dataset],fill:'transparent','stroke-width':prop.linewidth}});}}};this.drawTickmarks=function()\n{var group=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'g',attr:{className:'rgraph_radar_tickmarks'}});for(var i=0;i<this.coords2.length;++i){for(var j=0;j<this.coords2[i].length;++j){if(prop.tickmarks==='circle'||prop.tickmarks==='filledcircle'){var c=RG.SVG.create({svg:this.svg,type:'circle',parent:group,attr:{cx:this.coords2[i][j][0],cy:this.coords2[i][j][1],r:prop.tickmarksSize,fill:prop.tickmarks==='filledcircle'?prop.colors[i]:prop.tickmarksFill,stroke:prop.colors[i],'stroke-width':prop.tickmarksLinewidth,'clip-path':this.isTrace?'url(#trace-effect-clip)':''}});c.setAttribute('data-dataset',i);c.setAttribute('data-index',j);}else if(prop.tickmarks==='rect'||prop.tickmarks==='filledrect'){var halfTickmarkSize=prop.tickmarksSize/2;var fill=typeof prop.tickmarksFill==='object'&&prop.tickmarksFill[i]?prop.tickmarksFill[i]:prop.tickmarksFill;var s=RG.SVG.create({svg:this.svg,type:'rect',parent:group,attr:{x:this.coords2[i][j][0]-halfTickmarkSize,y:this.coords2[i][j][1]-halfTickmarkSize,width:prop.tickmarksSize,height:prop.tickmarksSize,fill:prop.tickmarks==='filledrect'?prop.colors[i]:fill,stroke:prop.colors[i],'stroke-width':prop.tickmarksLinewidth}});s.setAttribute('data-dataset',i);s.setAttribute('data-index',j);}}}};this.drawLabels=function()\n{var angles=this.angles2,prop=this.properties,labels=prop.labels;for(var i=0,len=labels.length;i<len;++i){if(!labels[i]){continue;}\nvar endpoint=RG.SVG.TRIG.getRadiusEndPoint({angle:RG.SVG.TRIG.TWOPI/labels.length*i-RG.SVG.TRIG.HALFPI,r:this.radius+15});var x=endpoint[0]+this.centerx,y=endpoint[1]+this.centery;if((i/len)<0.5){halign='left';}else{halign='right';}\nif((i/len)<0.25||(i/len)>0.75){valign='bottom';}else{valign='top';}\nif((i/len)===0){halign='center';}\nif((i/len)===0.25){valign='center';}\nif((i/len)===0.5){halign='center';}\nif((i/len)===0.75){valign='center';}\nRG.SVG.text({object:this,svg:this.svg,parent:this.svg.all,tag:'labels',text:labels[i],size:typeof prop.labelsSize==='number'?prop.labelsSize:prop.textSize,x:x,y:y,halign:halign,valign:'center',color:prop.labelsColor||prop.textColor,bold:typeof prop.labelsBold==='boolean'?prop.labelsBold:prop.textBold,italic:typeof prop.labelsItalic==='boolean'?prop.labelsItalic:prop.textItalic,font:prop.labelsFont||prop.textFont});}\nif(prop.scaleVisible){for(var i=0;i<this.scale.labels.length;++i){var x=this.centerx;var y=this.centery-(this.radius/this.scale.labels.length*(i+1));RG.SVG.text({object:this,svg:this.svg,parent:this.svg.all,tag:'labels.scale',text:this.scale.labels[i],size:prop.scaleSize||prop.textSize-2,x:x,y:y,halign:'center',valign:'center',background:'rgba(255,255,255,0.7)',padding:2,color:prop.scaleColor||prop.textColor,bold:typeof prop.scaleBold==='boolean'?prop.scaleBold:prop.textBold,italic:typeof prop.scaleItalic==='boolean'?prop.scaleItalic:prop.textItalic,font:prop.scaleFont||prop.textFont});}\nvar str=RG.SVG.numberFormat({object:this,num:this.scale.min.toFixed(prop.scaleDecimals),prepend:prop.scaleUnitsPre,append:prop.scaleUnitsPost,point:prop.scalePoint,thousand:prop.scaleThousand,formatter:prop.scaleFormatter});RG.SVG.text({object:this,svg:this.svg,parent:this.svg.all,tag:'labels.scale',text:str,size:prop.scaleSize||prop.textSize-2,x:this.centerx,y:this.centery,halign:'center',valign:'center',background:'rgba(255,255,255,0.7)',padding:2,color:prop.scaleColor||prop.textColor,bold:typeof prop.scaleBold==='boolean'?prop.scaleBold:prop.textBold,italic:typeof prop.scaleItalic==='boolean'?prop.scaleItalic:prop.textItalic,font:prop.scaleFont||prop.textFont});}};this.highlight=function(circle)\n{circle.setAttribute('fill',prop.highlightFill);circle.setAttribute('stroke',prop.highlightStroke);circle.setAttribute('stroke-width',prop.highlightLinewidth);this.highlight_node=circle;RG.SVG.REG.set('highlight',circle);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),highlightFill:RG.SVG.arrayClone(prop.highlightFill)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorRadial({object:this,color:colors[i]});}}\nprop.highlightFill=RG.SVG.parseColorRadial({object:this,color:prop.highlightFill});};this.getMaxValue=function()\n{var max=0;if(prop.filled&&prop.filledAccumulative){this.max=RG.SVG.arrayMax(this.data[this.data.length-1]);}else{for(var dataset=0,max=0;dataset<this.data.length;++dataset){this.max=ma.max(this.max,RG.SVG.arrayMax(this.data[dataset]));}}};this.getRadius=function(value)\n{return((value-prop.scaleMin)/(this.scale.max-prop.scaleMin))*this.radius;};this.addTooltipHotspots=function()\n{if(prop.tooltips&&prop.tooltips.length>0){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\nvar group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{className:'rgraph-radar-tooltip-hotspots'}});for(var dataset=0,seq=0;dataset<this.coords2.length;++dataset){for(var i=0;i<this.coords2[dataset].length;++i){var circle=RG.SVG.create({svg:this.svg,type:'circle',parent:group,attr:{cx:this.coords2[dataset][i][0],cy:this.coords2[dataset][i][1],r:prop.tickmarksSize,fill:'transparent',stroke:'transparent','stroke-width':0,'data-sequential-index':seq},style:{cursor:prop['tooltips'][seq]?'pointer':'default'}});(function(dataset,index,seq,obj)\n{if(prop.tooltips[seq]){circle.addEventListener(prop.tooltipsEvent,function(e)\n{var tooltip=RG.SVG.REG.get('tooltip');if(tooltip&&tooltip.__sequentialIndex__===seq){return;}\nRG.SVG.tooltip({object:obj,dataset:dataset,index:index,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(this);},false);if(prop.tooltipsEvent==='click'){circle.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}}(dataset,i,seq++,this));}}}};this.roundRobin=function()\n{};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=this.hideHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&this.highlight_node){this.highlight_node.setAttribute('fill','transparent');this.highlight_node.setAttribute('stroke','transparent');RG.SVG.REG.set('highlight',null);}};this.trace=function()\n{var opt=arguments[0]||{},frame=1,frames=opt.frames||120,obj=this\nstep=360/frames;this.isTrace=true;this.draw();var clipPath=RG.SVG.create({svg:this.svg,parent:this.svg.defs,type:'clipPath',attr:{id:'trace-effect-clip'}});clipPathArcPath=RG.SVG.TRIG.getArcPath2({cx:this.angles[0].cx,cy:this.angles[0].cy,r:this.angles[0].r*2,start:0,end:0});var clipPathArc=RG.SVG.create({svg:this.svg,parent:clipPath,type:'path',attr:{d:clipPathArcPath}});var iterator=function()\n{var width=(frame++)/frames*obj.width;var deg=(360/frames)*frame++,rad=(RG.SVG.TRIG.TWOPI/360)*deg\nclipPathArc.setAttribute('d',RG.SVG.TRIG.getArcPath2({cx:obj.angles[0].cx,cy:obj.angles[0].cy,r:obj.angles[0].r*2,start:0,end:rad}));if(frame<=frames){RG.SVG.FX.update(iterator);}else if(opt.callback){(opt.callback)(obj);}};iterator();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.rose.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Rose=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(conf.data);this.originalData=RG.SVG.arrayClone(conf.data);this.type='rose';this.angles=[];this.angles2=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes=[];this.shadowNodes=[];this.max=0;this.redraw=false;this.highlight_node=null;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={centerx:null,centery:null,radius:null,gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridRadialsCount:null,backgroundGridRadialsAngleOffset:0,backgroundGridConcentricsCount:5,backgroundGridLinewidth:1,strokestyle:'white',colors:['red','black','orange','green','#6ff','#ccc','pink','orange','cyan','maroon','olive','teal'],colorsOpacity:1,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labels:[],labelsFont:null,labelsSize:null,labelsColor:null,labelsBold:null,labelsItalic:null,labelsRadialMargin:10,labelsAngleOffset:0,scaleVisible:true,scaleUnitsPre:'',scaleUnitsPost:'',scaleMax:null,scaleMin:0,scalePoint:'.',scaleThousand:',',scaleRound:false,scaleDecimals:0,scaleFormatter:null,scaleBold:null,scaleItalic:null,scaleColor:null,scaleSize:null,scaleFont:null,scaleLabelsCount:5,linewidth:1,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,shadow:false,shadowOffsetx:2,shadowOffsety:2,shadowBlur:2,shadowOpacity:0.25,margin:0,exploded:0,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null,segmentsAngleOffset:0,variant:'normal',effectGrowMultiplier:1,effectRoundrobinMultiplier:1};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=RG.SVG.arrayClone(this.originalData);this.angles=[];for(var i=0;i<this.data.length;++i){this.angles2[i]=[];}\nRG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.centerx=(this.graphWidth/2)+prop.gutterLeft;this.centery=(this.graphHeight/2)+prop.gutterTop;this.radius=ma.min(this.graphWidth,this.graphHeight)/2;this.centerx=typeof prop.centerx==='number'?prop.centerx:this.centerx;this.centery=typeof prop.centery==='number'?prop.centery:this.centery;this.radius=typeof prop.radius==='number'?prop.radius:this.radius;if(typeof prop.radius==='string'&&prop.radius.match(/^\\+|-\\d+$/))this.radius+=parseFloat(prop.radius);if(typeof prop.centerx==='string'&&prop.centerx.match(/^\\+|-\\d+$/))this.centery+=parseFloat(prop.centerx);if(typeof prop.centery==='string'&&prop.centery.match(/^\\+|-\\d+$/))this.centerx+=parseFloat(prop.centery);if(typeof prop.margin==='string'&&prop.margin.match(/([0-9.]+)deg/)){prop.margin=RegExp.$1/(180/ma.PI);}\nfor(var i=0;i<this.data.length;++i){if(typeof this.data[i]==='object'){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j]==='string'){this.data[i][j]=RG.SVG.stringsToNumbers(this.data[i][j]);}}}else if(typeof this.data[i]==='string'){this.data[i]=RG.SVG.stringsToNumbers(this.data[i]);}}\nthis.getMaxValue();RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.scale=RG.SVG.getScale({object:this,numlabels:typeof prop.scaleLabelsCount==='number'?prop.scaleLabelsCount:prop.backgroundGridConcentricCount,unitsPre:prop.scaleUnitsPre,unitsPost:prop.scaleUnitsPost,max:typeof prop.scaleMax==='number'?prop.scaleMax:this.max,min:prop.scaleMin,point:prop.scalePoint,round:prop.scaleRound,thousand:prop.scaleThousand,decimals:prop.scaleDecimals,strict:typeof prop.scaleMax==='number',formatter:prop.scaleFormatter});this.max=this.scale.max;this.drawBackground();this.drawRose();this.drawLabels();RG.SVG.drawTitle(this);if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nif(prop.shadow){RG.SVG.setShadow({object:this,offsetx:prop.shadowOffsetx,offsety:prop.shadowOffsety,blur:prop.shadowBlur,opacity:prop.shadowOpacity,id:'dropShadow'});}\nvar obj=this;doc.body.addEventListener('mousedown',function(e)\n{obj.hideHighlight(obj);},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBackground=function()\n{if(prop.backgroundGrid){var grid=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'g',attr:{className:'rgraph_radar_grid',fill:'rgba(0,0,0,0)',stroke:prop.backgroundGridColor},style:{pointerEvents:'none'}});var origin=0-(RG.SVG.TRIG.PI/2),radials=(typeof prop.backgroundGridRadialsCount==='number'?prop.backgroundGridRadialsCount:this.data.length),concentrics=prop.backgroundGridConcentricsCount,step=RG.SVG.TRIG.TWOPI/radials;if(radials>0){if(prop.variant==='non-equi-angular'){var radials=this.data.length;for(var i=0,total=0;i<this.data.length;++i){total+=this.data[i][1];}\nfor(var i=0,sum=0;i<this.data.length;++i){var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius,angle:origin+((sum/total)*RG.SVG.TRIG.TWOPI)+prop.backgroundGridRadialsAngleOffset});var str='M {1} {2} L {3} {4}'.format(this.centerx,this.centery,coords.x,coords.y);RG.SVG.create({svg:this.svg,type:'path',parent:grid,attr:{d:str,stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});sum+=this.data[i][1];}}else{for(var i=0,len=radials;i<len;++i){var coords=RG.SVG.TRIG.toCartesian({cx:this.centerx,cy:this.centery,r:this.radius,angle:origin+(i*step)+prop.backgroundGridRadialsAngleOffset});var str='M {1} {2} L {3} {4}'.format(this.centerx,this.centery,coords.x,coords.y);RG.SVG.create({svg:this.svg,type:'path',parent:grid,attr:{d:str,stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});}}}\nif(concentrics>0){for(var j=1;j<=concentrics;j++){RG.SVG.create({svg:this.svg,type:'circle',parent:grid,attr:{cx:this.centerx,cy:this.centery,r:this.radius*(j/concentrics),fill:'transparent',stroke:prop.backgroundGridColor,'stroke-width':prop.backgroundGridLinewidth}});}}}};this.drawRose=function()\n{var opt=arguments[0]||{};for(var i=0;i<this.angles.length;++i){this.angles[i].element.parentNode.removeChild(this.angles[i].element);}\nthis.angles=[];for(var i=0;i<this.data.length;++i){this.angles2[i]=[];}\nif(prop.variant==='non-equi-angular'){return this.drawRoseNonEquiAngular(opt);}\nvar radians=RG.SVG.TRIG.TWOPI/this.data.length;if(!document.getElementById('rgraph_rose_segments_'+this.uid)){var group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'rgraph_rose_segments_'+this.uid}});}else{var group=document.getElementById('rgraph_rose_segments_'+this.uid);}\nfor(var i=0,seq=0;i<this.data.length;++i,++seq){var radius=(this.data[i]/this.scale.max)*this.radius*prop.effectGrowMultiplier,start=(i/this.data.length)*RG.SVG.TRIG.TWOPI*prop.effectRoundrobinMultiplier,end=(((i/this.data.length)*RG.SVG.TRIG.TWOPI)+radians)*prop.effectRoundrobinMultiplier;var explosion=this.getExploded({index:i,start:start-RG.SVG.TRIG.HALFPI,end:end-RG.SVG.TRIG.HALFPI});if(typeof this.data[i]==='object'&&!RG.SVG.isNull(this.data[i])){if(!document.getElementById('rose_'+this.uid+'_segment_group_'+i)){var segment_group=RG.SVG.create({svg:this.svg,type:'g',parent:group,attr:{id:'rose_'+this.uid+'_segment_group_'+i}});}else{var segment_group=document.getElementById('rose_'+this.uid+'_segment_group_'+i)}\nfor(var j=0,sum=0,accRadius=0;j<this.data[i].length;++j,++seq){sum+=this.data[i][j];var radius=(sum/this.scale.max)*this.radius*prop.effectGrowMultiplier,cx=this.centerx+(explosion[0]*prop.effectRoundrobinMultiplier),cy=this.centery+(explosion[1]*prop.effectRoundrobinMultiplier);var arcPath=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:radius,start:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:false});if(j===0){arcPath='{1} z'.format(arcPath);}else{var arcPath2=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:prevRadius,start:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:true});arcPath='{1} L {2} {3} {4}'.format(arcPath,cx,cy,arcPath2);}\nvar path=RG.SVG.create({svg:this.svg,type:'path',parent:segment_group,attr:{d:arcPath,fill:prop.colorsSequential?prop.colors[seq]:prop.colors[j],'fill-opacity':prop.colorsOpacity,stroke:prop.strokestyle,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[seq]:'','data-index':i,'data-centerx':cx,'data-centery':cy,'data-group':i,'data-subindex':j,'data-value':this.data[i][j],'data-start-angle':start,'data-end-angle':end,'data-radius':radius,'data-radius-inner':typeof prevRadius==='number'?prevRadius*prop.effectGrowMultiplier:0,'data-sequential-index':seq}});if(prop.tooltips&&prop.tooltips[seq]){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\n(function(index,group,seq,obj)\n{path.addEventListener(prop.tooltipsEvent,function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,group:group,index:index,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);var highlight=RG.SVG.REG.get('highlight');if(prop.tooltipsEvent==='mousemove'){highlight.style.cursor='pointer';}},false);if(prop.tooltipsEvent==='click'){path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(j,i,seq,this));}\nthis.angles.push({object:this,element:path,index:seq,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':prevRadius,value:this.data[i][j]});this.angles2[i].push({object:this,element:path,index:seq,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':prevRadius,value:this.data[i][j]});var prevRadius=radius;}\nseq--;}else{var cx=this.centerx+(explosion[0]*prop.effectRoundrobinMultiplier),cy=this.centery+(explosion[1]*prop.effectRoundrobinMultiplier);var arcPath=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:radius,start:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:false});var path=RG.SVG.create({svg:this.svg,type:'path',parent:group,attr:{d:'{1} z'.format(arcPath),fill:prop.colorsSequential?prop.colors[i]:prop.colors[0],'fill-opacity':prop.colorsOpacity,stroke:prop.strokestyle,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-index':i,'data-centerx':cx,'data-centery':cy,'data-value':this.data[i],'data-start-angle':start,'data-end-angle':end,'data-radius':radius,'data-sequential':seq}});this.angles.push({object:this,element:path,index:i,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':0,value:this.data[i]});this.angles2[i].push({object:this,element:path,index:seq,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':0,value:this.data[i]});if(prop.tooltips&&prop.tooltips[i]){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\n(function(index,obj)\n{path.addEventListener(prop.tooltipsEvent,function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:index,group:index,sequentialIndex:index,text:prop.tooltips[index],event:e});obj.highlight(e.target);var highlight=RG.SVG.REG.get('highlight');if(prop.tooltipsEvent==='mousemove'){highlight.style.cursor='pointer';}},false);if(prop.tooltipsEvent==='click'){path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(i,this));}}}};this.drawRoseNonEquiAngular=function(opt)\n{if(!document.getElementById('rgraph_rose_segments_'+this.uid)){var group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'rgraph_rose_segments_'+this.uid}});}else{var group=document.getElementById('rgraph_rose_segments_'+this.uid)}\nfor(var i=0,total=0;i<this.data.length;++i){total+=parseFloat(this.data[i][1]);}\nvar start=0;for(var i=0,seq=0;i<this.data.length;++i,++seq){var radians=(this.data[i][1]/total)*RG.SVG.TRIG.TWOPI,end=start+radians;var explosion=this.getExploded({index:i,start:start-RG.SVG.TRIG.HALFPI,end:end-RG.SVG.TRIG.HALFPI});if(typeof this.data[i][0]==='object'&&!RG.SVG.isNull(this.data[i][0])){if(!document.getElementById('rgraph_rose_'+this.uid+'_segment_group_'+i)){var segment_group=RG.SVG.create({svg:this.svg,type:'g',parent:group,attr:{id:'rgraph_rose_'+this.uid+'_segment_group_'+i}});}else{var segment_group=document.getElementById('rgraph_rose_'+this.uid+'_segment_group_'+i)}\nfor(var j=0,sum=0;j<this.data[i][0].length;++j,++seq){sum+=this.data[i][0][j];if(j===0){var prevRadius=0,radius=(sum/this.scale.max)*this.radius*prop.effectGrowMultiplier,cx=this.centerx+(explosion[0]*prop.effectRoundrobinMultiplier),cy=this.centery+(explosion[1]*prop.effectRoundrobinMultiplier);var arcPath=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:radius,start:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:false});var arcPath2='';}else{var prevRadius=radius,radius=(sum/this.scale.max)*this.radius*prop.effectGrowMultiplier,cx=this.centerx+(explosion[0]*prop.effectRoundrobinMultiplier),cy=this.centery+(explosion[1]*prop.effectRoundrobinMultiplier);var arcPath=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:radius,start:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:false});var arcPath2=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:prevRadius,start:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:true});}\nvar path=RG.SVG.create({svg:this.svg,type:'path',parent:segment_group,attr:{d:'{1} {2} z'.format(arcPath,arcPath2),fill:prop.colorsSequential?prop.colors[seq]:prop.colors[j],'fill-opacity':prop.colorsOpacity,stroke:prop.strokestyle,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-centerx':cx,'data-centery':cy,'data-index':i,'data-subindex':j,'data-value':this.data[i][0][j],'data-start-angle':start,'data-end-angle':end,'data-radius':radius,'data-radius-inner':prevRadius,'data-sequential':seq}});this.angles.push({object:this,element:path,index:i,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':prevRadius,value:this.data[i][0][j]});this.angles2[i].push({object:this,element:path,index:seq,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':prevRadius,value:this.data[i][0][j]});if(prop.tooltips&&prop.tooltips[seq]){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\n(function(index,group,seq,obj)\n{path.addEventListener(prop.tooltipsEvent,function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:index,group:group,sequentialIndex:seq,text:prop.tooltips[seq],event:e});obj.highlight(e.target);var highlight=RG.SVG.REG.get('highlight');if(prop.tooltipsEvent==='mousemove'){highlight.style.cursor='pointer';}},false);if(prop.tooltipsEvent==='click'){path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(j,i,seq,this));}\nvar prevRadius=radius;}\nseq--}else{var radius=(this.data[i][0]/this.scale.max)*this.radius*prop.effectGrowMultiplier,cx=this.centerx+(explosion[0]*prop.effectRoundrobinMultiplier),cy=this.centery+(explosion[1]*prop.effectRoundrobinMultiplier);var arcPath=RG.SVG.TRIG.getArcPath2({cx:cx,cy:cy,r:radius,start:((start+prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,end:((end-prop.margin)*prop.effectRoundrobinMultiplier)+prop.segmentsAngleOffset,anticlockwise:false});var path=RG.SVG.create({svg:this.svg,type:'path',parent:group,attr:{d:'{1} z'.format(arcPath),fill:prop.colorsSequential?prop.colors[i]:prop.colors[0],'fill-opacity':prop.colorsOpacity,stroke:prop.strokestyle,'stroke-width':prop.linewidth,'data-tooltip':(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips.length)?prop.tooltips[i]:'','data-centerx':cx,'data-centery':cy,'data-index':i,'data-value':this.data[i][0],'data-start-angle':start,'data-end-angle':end,'data-radius':radius,'data-sequential':seq}});this.angles.push({object:this,element:path,index:i,cx:cx,cy:cy,start:start,end:end,radius:radius,value:this.data[i][0]});this.angles2[i].push({object:this,element:path,index:seq,cx:cx,cy:cy,start:start,end:end,radius:radius,'radius-inner':0,value:this.data[i][0]});if(prop.tooltips&&prop.tooltips[i]){if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\n(function(index,group,seq,obj)\n{path.addEventListener(prop.tooltipsEvent,function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:index,group:index,sequentialIndex:seq,text:prop.tooltips[index],event:e});obj.highlight(e.target);var highlight=RG.SVG.REG.get('highlight');if(prop.tooltipsEvent==='mousemove'){highlight.style.cursor='pointer';}},false);if(prop.tooltipsEvent==='click'){path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(i,i,seq,this));}}\nstart+=radians;}};this.redrawRose=function()\n{};this.drawLabels=function()\n{if(prop.scaleVisible){if(!document.getElementById('rgraph_rose_scale_labels_'+this.uid)){var group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'rgraph_rose_scale_labels_'+this.uid}});}else{var group=document.getElementById('rgraph_rose_scale_labels_'+this.uid);}\nfor(var i=0;i<this.scale.labels.length;++i){var x=this.centerx,y=this.centery-(this.radius/this.scale.labels.length*(i+1));RG.SVG.text({object:this,svg:this.svg,parent:group,tag:'labels.scale',text:this.scale.labels[i],size:prop.scaleSize||prop.textSize-2,x:x,y:y,halign:'center',valign:'center',background:'rgba(255,255,255,0.7)',padding:2,color:prop.scaleColor||prop.textColor,bold:typeof prop.scaleBold==='boolean'?prop.scaleBold:prop.textBold,italic:typeof prop.scaleItalic==='boolean'?prop.scaleItalic:prop.textItalic,font:prop.scaleFont||prop.textFont});}\nvar str=RG.SVG.numberFormat({object:this,num:this.scale.min.toFixed(prop.scaleDecimals),prepend:prop.scaleUnitsPre,append:prop.scaleUnitsPost,point:prop.scalePoint,thousand:prop.scaleThousand,formatter:prop.scaleFormatter});RG.SVG.text({object:this,svg:this.svg,parent:group,tag:'labels.scale',text:str,size:prop.scaleSize||prop.textSize-2,x:this.centerx,y:this.centery,halign:'center',valign:'center',background:'rgba(255,255,255,0.7)',padding:2,color:prop.scaleColor||prop.textColor,bold:typeof prop.scaleBold==='boolean'?prop.scaleBold:prop.textBold,italic:typeof prop.scaleItalic==='boolean'?prop.scaleItalic:prop.textItalic,font:prop.scaleFont||prop.textFont});}\nvar halign;if(!document.getElementById('rgraph_rose_circular_labels_'+this.uid)){var group=RG.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{id:'rgraph_rose_circular_labels_'+this.uid}});}else{var group=document.getElementById('rgraph_rose_circular_labels_'+this.uid);}\nif(typeof prop.labelsSize!=='number'){prop.labelsSize=prop.textSize+4;}\nfor(var i=0;i<prop.labels.length;++i){if(prop.variant==='non-equi-angular'){var angle=((this.angles2[i][0].end-this.angles2[i][0].start)/2)+this.angles2[i][0].start-RG.SVG.TRIG.HALFPI;}else{var angle=(((RG.SVG.TRIG.TWOPI/prop.labels.length))*i)-RG.SVG.TRIG.HALFPI+prop.labelsAngleOffset+(RG.SVG.TRIG.TWOPI/(2*prop.labels.length));}\nvar endpoint=RG.SVG.TRIG.getRadiusEndPoint({r:this.radius+prop.labelsRadialMargin,angle:angle});var explosion=this.getExploded({index:i,start:this.angles2[i][0].start-RG.SVG.TRIG.HALFPI,end:this.angles2[i][0].end-RG.SVG.TRIG.HALFPI});endpoint[0]+=this.centerx+explosion[0];endpoint[1]+=this.centery+explosion[1];if(ma.round(endpoint[0])>this.centerx){halign='left';}else if(ma.round(endpoint[0])===this.centerx){halign='center';}else{halign='right';}\nRG.SVG.text({object:this,svg:this.svg,parent:group,tag:'labels',text:typeof prop.labels[i]==='string'?prop.labels[i]:'',size:prop.labelsSize,x:endpoint[0],y:endpoint[1],halign:halign,valign:'center',background:'rgba(255,255,255,0.7)',padding:2,color:prop.labelsColor||prop.textColor,bold:typeof prop.labelsBold==='boolean'?prop.labelsBold:prop.textBold,italic:typeof prop.labelsItalic==='boolean'?prop.labelsItalic:prop.textItalic,font:prop.labelsFont||prop.textFont});}};this.highlight=function(path)\n{var path=path.getAttribute('d');var highlight=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'path',attr:{d:path,fill:prop.highlightFill,stroke:prop.highlightStroke,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});if(prop.tooltipsEvent==='mousemove'){highlight.addEventListener('mouseout',function(e)\n{highlight.parentNode.removeChild(highlight);RG.SVG.hideTooltip();RG.SVG.REG.set('highlight',null);},false);}\nRG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),highlightFill:RG.SVG.arrayClone(prop.highlightFill)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorRadial({object:this,color:colors[i]});}}\nprop.highlightFill=RG.SVG.parseColorRadial({object:this,color:prop.highlightFill});};this.getMaxValue=function()\n{var max=0;if(prop.variant==='non-equi-angular'){for(var i=0;i<this.data.length;++i){if(!RG.SVG.isNull(this.data[i])){if(typeof this.data[i][0]==='number'){max=ma.max(max,this.data[i][0]);}else if(typeof this.data[i][0]==='object'){max=ma.max(max,RG.SVG.arraySum(this.data[i][0]));}}}}else{for(var i=0;i<this.data.length;++i){if(!RG.SVG.isNull(this.data[i])){if(typeof this.data[i]==='number'){max=ma.max(max,this.data[i]);}else if(typeof this.data[i]==='object'){max=ma.max(max,RG.SVG.arraySum(this.data[i]));}}}}\nthis.max=max;};this.getRadius=function(value)\n{return((value-prop.scaleMin)/(this.scale.max-prop.scaleMin))*this.radius;};this.roundRobin=function()\n{};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=this.hideHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight){highlight.setAttribute('fill','transparent');highlight.setAttribute('stroke','transparent');highlight=null;RG.SVG.REG.set('highlight',null);}};this.getExploded=function(opt)\n{var index=opt.index,start=opt.start,end=opt.end,exploded=prop.exploded,explodedX,explodedY;if(typeof exploded==='object'&&typeof exploded[index]==='number'){explodedX=ma.cos(((end-start)/2)+start)*exploded[index];explodedY=(ma.sin(((end-start)/2)+start)*exploded[index]);}else if(typeof exploded==='number'){explodedX=ma.cos(((end-start)/2)+start)*exploded;explodedY=ma.sin(((end-start)/2)+start)*exploded;}else{explodedX=0;explodedY=0;}\nreturn[explodedX,explodedY];};this.grow=function(opt)\n{var obj=this,opt=arguments[0]||{},frame=-1,frames=opt.frames||60,callback=opt.callback||function(){};prop.effectGrowMultiplier=0.01;this.draw();function iterator()\n{++frame;var multiplier=RG.SVG.FX.getEasingMultiplier(frames,frame);prop.effectGrowMultiplier=multiplier;obj.drawRose();if(frame>=frames){callback(obj);}else{RG.SVG.FX.update(iterator);}}\niterator();return this;};this.roundrobin=function(opt)\n{var obj=this,opt=arguments[0]||{},frame=-1,frames=opt.frames||60,callback=opt.callback||function(){};prop.effectRoundrobinMultiplier=0.01;this.draw();function iterator()\n{++frame;var multiplier=RG.SVG.FX.getEasingMultiplier(frames,frame);prop.effectRoundrobinMultiplier=multiplier;obj.drawRose();if(frame>=frames){callback(obj);}else{RG.SVG.FX.update(iterator);}}\niterator();return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.scatter.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Scatter=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=conf.data;this.type='scatter';this.coords=[];this.coords2=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.sequential=0;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundColor:null,backgroundImage:null,backgroundImageAspect:'none',backgroundImageStretch:true,backgroundImageOpacity:null,backgroundImageX:null,backgroundImageY:null,backgroundImageW:null,backgroundImageH:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,xmax:0,tickmarksStyle:'cross',tickmarksSize:7,colors:['black'],line:false,lineColors:1,lineLinewidth:1,errorbarsColor:'black',errorbarsLinewidth:1,errorbarsCapwidth:10,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:3,yaxisColor:'black',yaxisScale:true,yaxisLabels:null,yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisLabelsCount:5,yaxisUnitsPre:'',yaxisUnitsPost:'',yaxisStrict:false,yaxisDecimals:0,yaxisPoint:'.',yaxisThousand:',',yaxisRound:false,yaxisMax:null,yaxisMin:0,yaxisFormatter:null,xaxis:true,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisLabels:null,xaxisLabelsPosition:'section',xaxisLabelsPositionEdgeTickmarksCount:10,xaxisColor:'black',xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,xaxisMin:0,xaxisMax:null,xaxisLabelsCount:10,xaxisUnitsPre:'',xaxisUnitsPost:'',xaxisMax:null,xaxisMin:0,xaxisPoint:'.',xaxisRound:false,xaxisThousand:',',xaxisDecimals:0,xaxisFormatter:null,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:'rgba(255,255,255,0.7)',labelsAboveBackgroundPadding:2,labelsAboveXUnitsPre:null,labelsAboveXUnitsPost:null,labelsAboveXPoint:null,labelsAboveXThousand:null,labelsAboveXFormatter:null,labelsAboveXDecimals:null,labelsAboveXDecimalsTrim:null,labelsAboveYUnitsPre:null,labelsAboveYUnitsPost:null,labelsAboveYPoint:null,labelsAboveYThousand:null,labelsAboveYFormatter:null,labelsAboveYDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:-10,labelsAboveHalign:'center',labelsAboveValign:'bottom',labelsAboveSeperator:',',tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'mousemove',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null,bubble:false,bubbleMaxValue:null,bubbleMaxRadius:null,bubbleColorsSolid:false,errorbars:null,errorbarsColor:'black',errorbarsLinewidth:1,errorbarsCapwidth:10,};RG.SVG.getGlobals(this);for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}\nif(this.data[0]&&!RG.SVG.isArray(this.data[0])){this.data=[];this.data[0]=conf.data;}\nif(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;if(typeof prop.xaxisMin==='string'){prop.xaxisMin=RG.SVG.parseDate(prop.xaxisMin);}\nif(typeof prop.xaxisMax==='string'){prop.xaxisMax=RG.SVG.parseDate(prop.xaxisMax);}\nfor(var i=0;i<this.data.length;++i){for(var j=0;j<this.data[i].length;++j){if(typeof this.data[i][j].x==='string'){this.data[i][j].x=RG.SVG.parseDate(this.data[i][j].x);}}}\nthis.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.coords=[];this.coords2=[];RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();for(var ds=0,max=0;ds<this.data.length;++ds){for(var dp=0;dp<this.data[ds].length;++dp){max=ma.max(max,this.data[ds][dp].y+(this.data[ds][dp].errorbar?(typeof this.data[ds][dp].errorbar==='number'?this.data[ds][dp].errorbar:this.data[ds][dp].errorbar.max):0));}}\nif(typeof prop.yaxisMax==='number'){max=prop.yaxisMax;}\nif(prop.yaxisMin==='mirror'||prop.yaxisMin==='middle'||prop.yaxisMin==='center'){var mirrorScale=true;prop.yaxisMin=0;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:max,min:prop.yaxisMin,point:prop.yaxisPoint,round:prop.yaxisRound,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});if(mirrorScale){this.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:this.scale.max,min:this.scale.max* -1,point:prop.yaxisPoint,round:false,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});}\nthis.max=this.scale.max;this.min=this.scale.min;prop.yaxisMax=this.scale.max;prop.yaxisMin=this.scale.min;RG.SVG.drawBackground(this);RG.SVG.drawXAxis(this);RG.SVG.drawYAxis(this);var dataset_group=RGraph.SVG.create({svg:this.svg,type:'g',parent:this.svg.all,attr:{className:'scatter_datasets_'+this.uid}});for(var i=0;i<this.data.length;++i){this.drawPoints({index:i,data:this.data[i],group:dataset_group});if(prop.line===true||(typeof prop.line==='object'&&prop.line[i]===true)){this.drawLine({index:i,coords:this.coords2[i]});}}\nif(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawPoints=function(opt)\n{var index=opt.index,data=opt.data,group=opt.group;if(!this.coords2[index]){this.coords2[index]=[];}\nvar group=RG.SVG.create({svg:this.svg,type:'g',parent:group,attr:{className:'scatter_dataset_'+index+'_'+this.uid}});for(var i=0;i<data.length;++i){var point=data[i];if(typeof point.x==='number'&&typeof point.y==='number'){var ret=this.drawSinglePoint({dataset:data,datasetIdx:index,point:point,index:i,group:group,sequential:this.sequential});this.coords.push({x:ret.x,y:ret.y,z:ret.size,type:ret.type,element:ret.mark,object:this});this.coords2[index][i]={x:ret.x,y:ret.y,z:ret.size,type:ret.type,element:ret.mark,object:this};this.sequential++}\nif((typeof data[i].tooltip==='string'&&data[i].tooltip)||(typeof data[i].tooltip==='number')){data[i].tooltip=String(data[i].tooltip);if(prop.tooltipsEvent!=='mousemove'){prop.tooltipsEvent='click';}\nif(!group_tooltip_hotspots){var group_tooltip_hotspots=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'g',attr:{className:'rgraph-scatter-tooltip-hotspots'}});}\nvar rect=RG.SVG.create({svg:this.svg,parent:this.svg.all,type:'rect',parent:group_tooltip_hotspots,attr:{x:ret.x-(ret.size/2),y:ret.y-(ret.size/2),width:ret.size,height:ret.size,fill:'transparent',stroke:'transparent','stroke-width':0},style:{cursor:'pointer'}});ret.mark.hotspot=rect;(function(dataset,index,seq,obj)\n{rect.addEventListener(prop.tooltipsEvent,function(e)\n{var tooltip=RG.SVG.REG.get('tooltip');if(tooltip&&tooltip.__dataset__===dataset&&tooltip.__index__===index){return;}\nobj.removeHighlight();RG.SVG.tooltip({object:obj,dataset:dataset,index:index,sequentialIndex:seq,text:obj.data[dataset][index].tooltip,event:e});if(RG.SVG.REG.get('tooltip')){obj.highlight(this);}},false);if(prop.tooltipsEvent==='click'){rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer';},false);}}(index,i,this.sequential-1,this));}}};this.drawSinglePoint=function(opt)\n{var dataset=opt.dataset,datasetIdx=opt.datasetIdx,seq=opt.sequential,point=opt.point,index=opt.index,valueX=opt.point.x,valueY=opt.point.y,conf=opt.point||{},group=opt.group,coordX=opt.coordx=this.getXCoord(valueX),coordY=opt.coordy=this.getYCoord(valueY);if(conf.labelsAbove){var above=true;}else if(conf.labelAbove){var above=true;}else if(conf.above){var above=true;}\nif(typeof conf.type==='undefined'&&typeof conf.shape!=='undefined'){conf.type=conf.shape;}\nif(typeof conf.type==='string'){}else if(typeof prop.tickmarksStyle==='string'){conf.type=prop.tickmarksStyle;}else if(typeof prop.tickmarksStyle==='object'&&typeof prop.tickmarksStyle[datasetIdx]==='string'){conf.type=prop.tickmarksStyle[datasetIdx];}\nif(typeof conf.size!=='number'&&typeof prop.tickmarksSize==='number'){conf.size=prop.tickmarksSize;}else if(typeof conf.size!=='number'&&typeof prop.tickmarksSize==='object'&&typeof prop.tickmarksSize[datasetIdx]==='number'){conf.size=prop.tickmarksSize[datasetIdx];}\nif(typeof conf.color==='string'){}else if(typeof prop.colors[datasetIdx]==='string'){conf.color=prop.colors[datasetIdx];}else{conf.color='black';}\nif(typeof conf.opacity==='undefined'){conf.opacity=1;}else if(typeof conf.opacity==='number'){}\nprop.errorbars=[];for(var ds=0,max=0;ds<this.data.length;++ds){for(var idx=0;idx<this.data[ds].length;++idx){prop.errorbars.push(this.data[ds][idx].errorbar);}}\nthis.drawErrorbar({object:this,dataset:datasetIdx,index:index,group:group,sequential:seq,x:coordX,y:coordY,valueX:valueX,valueY:valueY,parent:group});if(prop.bubble){return this.drawBubble(opt,conf);}\nswitch(conf.type){case'image:'+conf.type.substr(6):var src=conf.type.substr(6);var img=new Image();img.src=src;var mark=RG.SVG.create({svg:this.svg,type:'image',parent:group,attr:{preserveAspectRatio:'xMidYMid meet','xlink:href':src}});img.onload=function()\n{var x=coordX-(img.width/2),y=coordY-(img.height/2),w=img.width,h=img.height;mark.setAttribute('x',x);mark.setAttribute('y',y);mark.setAttribute('width',w);mark.setAttribute('height',h);if(mark&&mark.hotspot){mark.hotspot.setAttribute('x',x);mark.hotspot.setAttribute('y',y);mark.hotspot.setAttribute('width',w);mark.hotspot.setAttribute('height',h);}};break;case'triangle':var mark=RG.SVG.create({svg:this.svg,type:'path',parent:group,attr:{d:'M {1} {2} L {3} {4} L {5} {6}'.format(coordX-(conf.size/2),coordY+(conf.size/2),coordX,coordY-(conf.size/2),coordX+(conf.size/2),coordY+(conf.size/2)),fill:conf.color,'fill-opacity':conf.opacity}});break;case'plus':var mark=RG.SVG.create({svg:this.svg,type:'path',parent:group,attr:{d:'M {1} {2} L {3} {4} M {5} {6} L {7} {8}'.format(coordX-(conf.size/2),coordY,coordX+(conf.size/2),coordY,coordX,coordY-(conf.size/2),coordX,coordY+(conf.size/2)),stroke:conf.color,'stroke-opacity':conf.opacity}});break;case'square':case'rect':var mark=RG.SVG.create({svg:this.svg,type:'rect',parent:group,attr:{x:coordX-(conf.size/2),y:coordY-(conf.size/2),width:conf.size,height:conf.size,fill:conf.color,'fill-opacity':conf.opacity}});break;case'dot':case'circle':var mark=RG.SVG.create({svg:this.svg,type:'circle',parent:group,attr:{cx:coordX,cy:coordY,r:conf.size/2,fill:conf.color,'fill-opacity':conf.opacity}});break;case'cross':default:var mark=RG.SVG.create({svg:this.svg,type:'path',parent:group,attr:{d:'M {1} {2} L {3} {4} M {5} {6} L {7} {8}'.format(coordX-(conf.size/2),coordY-(conf.size/2),coordX+(conf.size/2),coordY+(conf.size/2),coordX-(conf.size/2),coordY+(conf.size/2),coordX+(conf.size/2),coordY-(conf.size/2)),stroke:conf.color,'stroke-opacity':conf.opacity}});break;}\nif(typeof conf.above==='string'||(typeof conf.above!=='string'&&conf.above)){this.drawLabelsAbove({point:conf,coordX:coordX,coordY:coordY});}\nmark.setAttribute('data-index',index);mark.setAttribute('data-dataset',datasetIdx);mark.setAttribute('data-original-opacity',conf.opacity);mark.setAttribute('data-original-color',conf.color);mark.setAttribute('data-original-coordx',coordX);mark.setAttribute('data-original-coordy',coordY);mark.setAttribute('data-size',conf.size);mark.setAttribute('data-sequential',seq);mark.setAttribute('data-type',conf.type);return{x:coordX,y:coordY,size:conf.type.substr(0,6)==='image:'?img.width:conf.size,mark:mark,type:conf.type};};this.drawBubble=function(opt,conf)\n{var size=(conf.z/prop.bubbleMaxValue)*prop.bubbleMaxRadius;var color=RG.SVG.parseColorRadial({object:this,color:prop.bubbleColorsSolid?conf.color:'Gradient(white:'+conf.color+')',cx:opt.coordx+(size/4),cy:opt.coordy-(size/4),fx:opt.coordx+(size/4),fy:opt.coordy-(size/4),r:size*1.5});var circle=RG.SVG.create({svg:this.svg,type:'circle',attr:{cx:opt.coordx,cy:opt.coordy,r:size,fill:color,'fill-opacity':conf.opacity}});circle.setAttribute('data-index',opt.index);circle.setAttribute('data-dataset',opt.datasetIdx);circle.setAttribute('data-original-opacity',conf.opacity);circle.setAttribute('data-original-color',conf.color);circle.setAttribute('data-original-coordx',opt.coordx);circle.setAttribute('data-original-coordy',opt.coordy);circle.setAttribute('data-size',size);circle.setAttribute('data-sequential',opt.sequential);circle.setAttribute('data-type','bubble');return{x:opt.coordx,y:opt.coordy,z:opt.coordz};};this.drawLine=function(opt)\n{var linewidth=1,color='black';if(typeof prop.lineLinewidth==='object'&&typeof prop.lineLinewidth[opt.index]==='number'){linewidth=prop.lineLinewidth[opt.index];}else if(typeof prop.lineLinewidth==='number'){linewidth=prop.lineLinewidth;}else{linewidth=1;}\nif(typeof prop.lineColors==='object'&&prop.lineColors[opt.index]){color=prop.lineColors[opt.index];}else if(prop.colors[opt.index]==='string'){color=prop.colors[opt.index];}else{color='black';}\nfor(var i=0,path='';i<this.coords2[opt.index].length;++i){path+='{1} {2} {3} '.format(i===0?'M':'L',this.coords2[opt.index][i].x,this.coords2[opt.index][i].y);}\nRG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:path,fill:'transparent',stroke:color,'stroke-width':linewidth,'stroke-linecap':'round','stroke-linejoin':'round'}});};this.getXCoord=function(value)\n{var x;if(value>prop.xaxisMax){return null;}\nif(value<prop.xaxisMin){return null;}\nx=((value-prop.xaxisMin)/(prop.xaxisMax-prop.xaxisMin));x*=(this.width-prop.gutterLeft-prop.gutterRight);x=prop.gutterLeft+x;return x;};this.getYCoord=function(value)\n{var prop=this.properties;if(value>this.scale.max){return null;}\nvar y,xaxispos=prop.xaxispos;if(value<this.scale.min){return null;}\ny=((value-this.scale.min)/(this.scale.max-this.scale.min));y*=(this.height-prop.gutterTop-prop.gutterBottom);y=this.height-prop.gutterBottom-y;return y;};this.highlight=function(rect)\n{rect.setAttribute('fill',prop.highlightFill);RG.SVG.REG.set('highlight',rect);};this.drawLabelsAbove=function(opt)\n{var conf=opt.point,coordX=opt.coordX,coordY=opt.coordY;if(typeof conf.above==='string'){var str=conf.above;}else{conf.x=RG.SVG.numberFormat({object:this,num:conf.x.toFixed(prop.labelsAboveXDecimals),prepend:typeof prop.labelsAboveXUnitsPre==='string'?prop.labelsAboveXUnitsPre:null,append:typeof prop.labelsAboveXUnitsPost==='string'?prop.labelsAboveXUnitsPost:null,point:typeof prop.labelsAboveXPoint==='string'?prop.labelsAboveXPoint:null,thousand:typeof prop.labelsAboveXThousand==='string'?prop.labelsAboveXThousand:null,formatter:typeof prop.labelsAboveXFormatter==='function'?prop.labelsAboveXFormatter:null,decimals_trim:prop.labelsAboveXDecimalsTrim});conf.y=RG.SVG.numberFormat({object:this,num:conf.y.toFixed(prop.labelsAboveYDecimals),prepend:typeof prop.labelsAboveYUnitsPre==='string'?prop.labelsAboveYUnitsPre:null,append:typeof prop.labelsAboveYUnitsPost==='string'?prop.labelsAboveYUnitsPost:null,point:typeof prop.labelsAboveYPoint==='string'?prop.labelsAboveYPoint:null,thousand:typeof prop.labelsAboveYThousand==='string'?prop.labelsAboveYThousand:null,formatter:typeof prop.labelsAboveYFormatter==='function'?prop.labelsAboveYFormatter:null,decimals_trim:prop.labelsAboveYDecimalsTrim});var str='{1}{2}{3}'.format(conf.x,prop.labelsAboveSeperator,conf.y);}\nRG.SVG.text({object:this,parent:this.svg.all,tag:'labels.above',text:str,x:parseFloat(coordX)+prop.labelsAboveOffsetx,y:parseFloat(coordY)+prop.labelsAboveOffsety,halign:prop.labelsAboveHalign,valign:prop.labelsAboveValign,font:prop.labelsAboveFont||prop.textFont,size:prop.labelsAboveSize||prop.textSize,bold:prop.labelsAboveBold||prop.textBold,italic:prop.labelsAboveItalic||prop.textItalic,color:prop.labelsAboveColor||prop.textColor,background:prop.labelsAboveBackground||null,padding:prop.labelsAboveBackgroundPadding||0});};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors&&!prop.bubble){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i]});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor});};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight){highlight.setAttribute('fill','transparent');RG.SVG.REG.set('highlight',null);}};this.drawErrorbar=function(opt)\n{var max=RG.SVG.getErrorbarsMaxValue({object:this,index:opt.sequential});var min=RG.SVG.getErrorbarsMinValue({object:this,index:opt.sequential});if(!max&&!min){return;}\nvar linewidth=RG.SVG.getErrorbarsLinewidth({object:this,index:opt.sequential}),color=RG.SVG.getErrorbarsColor({object:this,index:opt.sequential}),capwidth=RG.SVG.getErrorbarsCapWidth({object:this,index:opt.sequential}),halfCapWidth=capwidth/2;if(max!==0||min!==0){var y1=this.getYCoord(opt.valueY+max)\ny2=this.getYCoord(opt.valueY-min);var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:opt.parent,attr:{x1:opt.x,y1:opt.y,x2:opt.x,y2:y1,stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:opt.parent,attr:{x1:opt.x-halfCapWidth,y1:y1,x2:opt.x+halfCapWidth,y2:y1,stroke:color,'stroke-width':linewidth}});}\nif(typeof min==='number'){var errorbarLine=RG.SVG.create({svg:this.svg,type:'line',parent:opt.parent,attr:{x1:opt.x,y1:opt.y,x2:opt.x,y2:y2,stroke:color,'stroke-width':linewidth}});var errorbarCap=RG.SVG.create({svg:this.svg,type:'line',parent:opt.parent,attr:{x1:opt.x-halfCapWidth,y1:y2,x2:opt.x+halfCapWidth,y2:y2,stroke:color,'stroke-width':linewidth}});}};};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.semicircularprogress.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.SemiCircularProgress=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.min=RG.SVG.stringsToNumbers(conf.min);this.max=RG.SVG.stringsToNumbers(conf.max);this.value=RG.SVG.stringsToNumbers(conf.value);this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));this.data=conf.data;this.type='semicircularprogress';this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;this.nodes={};this.shadowNodes=[];RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={centerx:null,centery:null,radius:null,width:60,gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundStrokeLinewidth:0.25,backgroundStroke:'gray',backgroundFill:'Gradient(white:#aaa)',backgroundFillOpacity:0.25,colors:['#0c0'],strokestyle:'#666',textColor:'gray',textFont:'sans-serif',textSize:10,textBold:false,textItalic:false,unitsPre:'',unitsPost:'',scalePoint:'.',scaleThousand:',',scaleDecimals:0,scaleFormatter:null,labelsMin:true,labelsMinSpecific:null,labelsMinPoint:null,labelsMinThousand:null,labelsMinFormatter:null,labelsMinFont:null,labelsMinSize:null,labelsMinBold:null,labelsMinItalic:null,labelsMinColor:null,labelsMinDecimals:null,labelsMinUnitsPre:null,labelsMinUnitsPost:null,labelsMax:true,labelsMaxSpecific:null,labelsMaxPoint:null,labelsMaxThousand:null,labelsMaxFormatter:null,labelsMaxFont:null,labelsMaxSize:null,labelsMaxBold:null,labelsMaxItalic:null,labelsMaxColor:null,labelsMaxDecimals:null,labelsMaxUnitsPre:null,labelsMaxUnitsPost:null,labelsCenter:true,labelsCenterSpecific:null,labelsCenterPoint:null,labelsCenterThousand:null,labelsCenterFormatter:null,labelsCenterFont:null,labelsCenterSize:40,labelsCenterBold:true,labelsCenterItalic:null,labelsCenterColor:'#666',labelsCenterDecimals:null,labelsCenterUnitsPre:null,labelsCenterUnitsPost:null,linewidth:0,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:'',titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.nodes={};this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;this.centerx=(this.graphWidth/2)+prop.gutterLeft;this.centery=this.height-prop.gutterBottom;this.radius=ma.min(this.graphWidth/2,this.graphHeight);this.centerx=typeof prop.centerx==='number'?prop.centerx:this.centerx;this.centery=typeof prop.centery==='number'?prop.centery:this.centery;this.radius=typeof prop.radius==='number'?prop.radius:this.radius;if(typeof prop.radius==='string'&&prop.radius.match(/^\\+|-\\d+$/))this.radius+=parseFloat(prop.radius);if(typeof prop.centerx==='string'&&prop.centerx.match(/^\\+|-\\d+$/))this.centery+=parseFloat(prop.centerx);if(typeof prop.centery==='string'&&prop.centery.match(/^\\+|-\\d+$/))this.centerx+=parseFloat(prop.centery);this.progressWidth=prop.width||(this.radius/3);RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();this.path=this.drawMeter();RG.SVG.drawTitle(this);this.drawLabels();RG.SVG.attribution(this);if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[0]){var obj=this;this.path.addEventListener(prop.tooltipsEvent,function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:0,group:null,sequentialIndex:0,text:prop.tooltips[0],event:e});obj.highlight(e.target);},false);this.path.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);}\nvar obj=this;doc.body.addEventListener('mousedown',function(e)\n{obj.removeHighlight();},false);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawMeter=function()\n{var path=RG.SVG.TRIG.getArcPath({cx:this.centerx,cy:this.centery,r:this.radius,start:RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI,end:RG.SVG.TRIG.HALFPI,anticlockwise:false});var path2=RG.SVG.TRIG.getArcPath({cx:this.centerx,cy:this.centery,r:this.radius-this.progressWidth,end:RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI,start:RG.SVG.TRIG.HALFPI,anticlockwise:true,moveto:false});var background=RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:path+\" L \"+(this.centerx+this.radius-this.progressWidth)+\" \"+this.centery+path2+\" L \"+(this.centerx-this.radius)+\" \"+this.centery,fill:prop.backgroundFill||prop.colors[0],stroke:prop.backgroundStroke,'stroke-width':prop.backgroundStrokeLinewidth,'fill-opacity':prop.backgroundFillOpacity}});this.nodes.background=background;var angle=((this.value-this.min)/(this.max-this.min))*RG.SVG.TRIG.PI;angle-=RG.SVG.TRIG.HALFPI;var path=RG.SVG.TRIG.getArcPath({cx:this.centerx,cy:this.centery,r:this.radius,start:RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI,end:angle,anticlockwise:false});var path2=RG.SVG.TRIG.getArcPath({cx:this.centerx,cy:this.centery,r:this.radius-this.progressWidth,start:angle,end:angle,anticlockwise:false,array:true});var path3=RG.SVG.TRIG.getArcPath({cx:this.centerx,cy:this.centery,r:this.radius-this.progressWidth,start:angle,end:RG.SVG.TRIG.PI+RG.SVG.TRIG.HALFPI,anticlockwise:true,moveto:false});var path=RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:path+\" L{1} {2} \".format(path2[1],path2[2])+path3+' z',fill:prop.colors[0],stroke:'black','stroke-width':prop.linewidth}});this.nodes.bar=path;return path;};this.drawLabels=function()\n{if(prop.labelsMin){var min=RG.SVG.numberFormat({object:this,num:this.min.toFixed(typeof prop.labelsMinDecimals==='number'?prop.labelsMinDecimals:prop.scaleDecimals),prepend:typeof prop.labelsMinUnitsPre==='string'?prop.labelsMinUnitsPre:prop.unitsPre,append:typeof prop.labelsMinUnitsPost==='string'?prop.labelsMinUnitsPost:prop.unitsPost,point:typeof prop.labelsMinPoint==='string'?prop.labelsMinPoint:prop.scalePoint,thousand:typeof prop.labelsMinThousand==='string'?prop.labelsMinThousand:prop.scaleThousand,formatter:typeof prop.labelsMinFormatter==='function'?prop.labelsMinFormatter:prop.scaleFormatter});var text=RG.SVG.text({object:this,parent:this.svg.all,tag:'labels.min',text:typeof prop.labelsMinSpecific==='string'?prop.labelsMinSpecific:min,x:this.centerx-this.radius+(this.progressWidth/2),y:this.height-prop.gutterBottom+5,valign:'top',halign:'center',font:prop.labelsMinFont||prop.textFont,size:prop.labelsMinSize||prop.textSize,bold:typeof prop.labelsMinBold==='boolean'?prop.labelsMinBold:prop.textBold,italic:typeof prop.labelsMinItalic==='boolean'?prop.labelsMinItalic:prop.textItalic,color:prop.labelsMinColor||prop.textColor});this.nodes.labelsMin=text;}\nif(prop.labelsMax){var max=RG.SVG.numberFormat({object:this,num:this.max.toFixed(typeof prop.labelsMaxDecimals==='number'?prop.labelsMaxDecimals:prop.scaleDecimals),prepend:typeof prop.labelsMaxUnitsPre==='string'?prop.labelsMaxUnitsPre:prop.unitsPre,append:typeof prop.labelsMaxUnitsPost==='string'?prop.labelsMaxUnitsPost:prop.unitsPost,point:typeof prop.labelsMaxPoint==='string'?prop.labelsMaxPoint:prop.scalePoint,thousand:typeof prop.labelsMaxThousand==='string'?prop.labelsMaxThousand:prop.scaleThousand,formatter:typeof prop.labelsMaxFormatter==='function'?prop.labelsMaxFormatter:prop.scaleFormatter});var text=RG.SVG.text({object:this,parent:this.svg.all,tag:'labels.max',text:typeof prop.labelsMaxSpecific==='string'?prop.labelsMaxSpecific:max,x:this.centerx+this.radius-(this.progressWidth/2),y:this.height-prop.gutterBottom+5,valign:'top',halign:'center',font:prop.labelsMaxFont||prop.textFont,size:prop.labelsMaxSize||prop.textSize,bold:typeof prop.labelsMaxBold==='boolean'?prop.labelsMaxBold:prop.textBold,italic:typeof prop.labelsMaxItalic==='boolean'?prop.labelsMaxItalic:prop.textItalic,color:prop.labelsMaxColor||prop.textColor});this.nodes.labelsMax=text;}\nif(prop.labelsCenter){var center=RG.SVG.numberFormat({object:this,num:this.value.toFixed(typeof prop.labelsCenterDecimals==='number'?prop.labelsCenterDecimals:prop.scaleDecimals),prepend:typeof prop.labelsCenterUnitsPre==='string'?prop.labelsCenterUnitsPre:prop.unitsPre,append:typeof prop.labelsCenterUnitsPost==='string'?prop.labelsCenterUnitsPost:prop.unitsPost,point:typeof prop.labelsCenterPoint==='string'?prop.labelsCenterPoint:prop.scalePoint,thousand:typeof prop.labelsCenterThousand==='string'?prop.labelsCenterThousand:prop.scaleThousand,formatter:typeof prop.labelsCenterFormatter==='function'?prop.labelsCenterFormatter:prop.scaleFormatter});var text=RG.SVG.text({object:this,parent:this.svg.all,tag:'labels.center',text:typeof prop.labelsCenterSpecific==='string'?prop.labelsCenterSpecific:center,x:this.centerx,y:this.centery,valign:'bottom',halign:'center',font:prop.labelsCenterFont||prop.textFont,size:prop.labelsCenterSize||prop.textSize,bold:typeof prop.labelsCenterBold==='boolean'?prop.labelsCenterBold:prop.textBold,italic:typeof prop.labelsCenterItalic==='boolean'?prop.labelsCenterItalic:prop.textItalic,color:prop.labelsCenterColor||prop.textColor});this.nodes.labelsCenter=text;}};this.highlight=function(segment)\n{this.removeHighlight();var highlight=RG.SVG.create({svg:this.svg,type:'path',parent:this.svg.all,attr:{d:this.path.getAttribute('d'),fill:prop.highlightFill,stroke:prop.highlightStroke,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});RG.SVG.REG.set('highlight',highlight);var obj=this;doc.body.addEventListener('mousedown',function(e)\n{obj.removeHighlight();},false);};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight){highlight.parentNode.removeChild(highlight);highlight=null;}};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i],start:this.centerx-this.radius,end:this.centerx+this.radius,direction:'horizontal'});}}\nprop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill,start:prop.gutterLeft,end:this.width-prop.gutterRight,direction:'horizontal'});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor,start:prop.gutterLeft,end:this.width-prop.gutterRight,direction:'horizontal'});};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,obj=this,value=opt.value;value=this.value;this.draw();var iterate=function()\n{var multiplier=frame/frames*RG.SVG.FX.getEasingMultiplier(frames,frame)*RG.SVG.FX.getEasingMultiplier(frames,frame);obj.value=value*multiplier;RG.SVG.redraw();if(frame++<frames){RG.SVG.FX.update(iterate);}else if(opt.callback){obj.value=value;RG.SVG.redraw();(opt.callback)(obj);}};iterate();return this;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.svg.waterfall.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.SVG=RGraph.SVG||{};(function(win,doc,undefined)\n{var RG=RGraph,ua=navigator.userAgent,ma=Math,win=window,doc=document;RG.SVG.Waterfall=function(conf)\n{this.set=function(name,value)\n{if(arguments.length===1&&typeof name==='object'){for(i in arguments[0]){if(typeof i==='string'){var ret=RG.SVG.commonSetter({object:this,name:i,value:arguments[0][i]});name=ret.name;value=ret.value;this.set(name,value);}}}else{var ret=RG.SVG.commonSetter({object:this,name:name,value:value});name=ret.name;value=ret.value;this.properties[name]=value;if(name==='colors'){this.originalColors=RG.SVG.arrayClone(value);this.colorsParsed=false;}}\nreturn this;};this.id=conf.id;this.uid=RG.SVG.createUID();this.container=document.getElementById(this.id);this.layers={};this.svg=RG.SVG.createSVG({object:this,container:this.container});this.isRGraph=true;this.data=conf.data;this.type='waterfall';this.coords=[];this.colorsParsed=false;this.originalColors={};this.gradientCounter=1;RG.SVG.OR.add(this);this.container.style.display='inline-block';this.properties={gutterLeft:35,gutterRight:35,gutterTop:35,gutterBottom:35,backgroundColor:null,backgroundImage:null,backgroundImageAspect:'none',backgroundImageStretch:true,backgroundImageOpacity:null,backgroundImageX:null,backgroundImageY:null,backgroundImageW:null,backgroundImageH:null,backgroundGrid:true,backgroundGridColor:'#ddd',backgroundGridLinewidth:1,backgroundGridHlines:true,backgroundGridHlinesCount:null,backgroundGridVlines:true,backgroundGridVlinesCount:null,backgroundGridBorder:true,backgroundGridDashed:false,backgroundGridDotted:false,backgroundGridDashArray:null,colors:['black','red','blue'],colorsSequential:false,strokestyle:'#aaa',strokestyleConnector:null,total:true,hmargin:5,linewidth:1,yaxis:true,yaxisTickmarks:true,yaxisTickmarksLength:5,yaxisColor:'black',yaxisScale:true,yaxisLabels:null,yaxisLabelsOffsetx:0,yaxisLabelsOffsety:0,yaxisLabelsCount:5,yaxisUnitsPre:'',yaxisUnitsPost:'',yaxisStrict:false,yaxisDecimals:0,yaxisPoint:'.',yaxisThousand:',',yaxisRound:false,yaxisMax:null,yaxisMin:0,yaxisFormatter:null,yaxisTextColor:null,yaxisTextBold:null,yaxisTextItalic:null,yaxisTextFont:null,yaxisTextSize:null,xaxis:true,xaxisTickmarks:true,xaxisTickmarksLength:5,xaxisLabels:null,xaxisLabelsPosition:'section',xaxisLabelsPositionEdgeTickmarksCount:null,xaxisColor:'black',xaxisLabelsOffsetx:0,xaxisLabelsOffsety:0,labelsAbove:false,labelsAboveFont:null,labelsAboveSize:null,labelsAboveBold:null,labelsAboveItalic:null,labelsAboveColor:null,labelsAboveBackground:'rgba(255,255,255,0.5)',labelsAboveBackgroundPadding:2,labelsAboveUnitsPre:null,labelsAboveUnitsPost:null,labelsAbovePoint:null,labelsAboveThousand:null,labelsAboveFormatter:null,labelsAboveDecimals:null,labelsAboveOffsetx:0,labelsAboveOffsety:0,labelsAboveHalign:'center',labelsAboveValign:'bottom',labelsAboveSpecific:null,labelsAboveLastFont:null,labelsAboveLastBold:null,labelsAboveLastItalic:null,labelsAboveLastSize:null,labelsAboveLastColor:null,labelsAboveLastBackground:null,labelsAboveLastBackgroundPadding:null,textColor:'black',textFont:'sans-serif',textSize:12,textBold:false,textItalic:false,tooltips:null,tooltipsOverride:null,tooltipsEffect:'fade',tooltipsCssClass:'RGraph_tooltip',tooltipsEvent:'click',highlightStroke:'rgba(0,0,0,0)',highlightFill:'rgba(255,255,255,0.7)',highlightLinewidth:1,title:null,titleSize:16,titleX:null,titleY:null,titleHalign:'center',titleValign:null,titleColor:'black',titleFont:null,titleBold:false,titleItalic:false,titleSubtitle:null,titleSubtitleSize:10,titleSubtitleX:null,titleSubtitleY:null,titleSubtitleHalign:'center',titleSubtitleValign:null,titleSubtitleColor:'#aaa',titleSubtitleFont:null,titleSubtitleBold:false,titleSubtitleItalic:false,key:null,keyColors:null,keyOffsetx:0,keyOffsety:0,keyTextOffsetx:0,keyTextOffsety:-1,keyTextSize:null,keyTextBold:null,keyTextItalic:null};RG.SVG.getGlobals(this);if(RG.SVG.FX&&typeof RG.SVG.FX.decorate==='function'){RG.SVG.FX.decorate(this);}\nvar prop=this.properties;this.draw=function()\n{RG.SVG.fireCustomEvent(this,'onbeforedraw');this.width=Number(this.svg.getAttribute('width'));this.height=Number(this.svg.getAttribute('height'));RG.SVG.createDefs(this);this.coords=[];this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;RG.SVG.resetColorsToOriginalValues({object:this});this.parseColors();if(prop.total){var sum=RG.SVG.arraySum(this.data);this.data.push(sum);if(prop.xaxisLabels&&prop.xaxisLabels.length===(this.data.length-1)){prop.xaxisLabels.push('');}}\nfor(var i=0,max=0,runningTotal=0;i<this.data.length-(prop.total?1:0);++i){runningTotal+=this.data[i]\nmax=ma.max(ma.abs(max),ma.abs(runningTotal));}\nif(typeof prop.yaxisMax==='number'){max=prop.yaxisMax;}\nif(prop.yaxisMin==='mirror'||prop.yaxisMin==='middle'||prop.yaxisMin==='center'){var mirrorScale=true;prop.yaxisMin=0;}\nthis.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:max,min:prop.yaxisMin,point:prop.yaxisPoint,round:prop.yaxisRound,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});if(mirrorScale){this.scale=RG.SVG.getScale({object:this,numlabels:prop.yaxisLabelsCount,unitsPre:prop.yaxisUnitsPre,unitsPost:prop.yaxisUnitsPost,max:this.scale.max,min:this.scale.max* -1,point:prop.yaxisPoint,round:false,thousand:prop.yaxisThousand,decimals:prop.yaxisDecimals,strict:typeof prop.yaxisMax==='number',formatter:prop.yaxisFormatter});}\nthis.max=this.scale.max;this.min=this.scale.min;prop.yaxisMax=this.scale.max;prop.yaxisMin=this.scale.min;RG.SVG.drawBackground(this);RG.SVG.drawXAxis(this);RG.SVG.drawYAxis(this);this.drawBars();this.drawLabelsAbove();if(typeof prop.key!==null&&RG.SVG.drawKey){RG.SVG.drawKey(this);}else if(!RGraph.SVG.isNull(prop.key)){alert('The drawKey() function does not exist - have you forgotten to include the key library?');}\nRG.SVG.attribution(this);RG.SVG.fireCustomEvent(this,'ondraw');return this;};this.drawBars=function()\n{this.graphWidth=this.width-prop.gutterLeft-prop.gutterRight;this.graphHeight=this.height-prop.gutterTop-prop.gutterBottom;var innerWidth=(this.graphWidth/this.data.length)-(2*prop.hmargin),outerWidth=(this.graphWidth/this.data.length);var y=this.getYCoord(0),total=0;for(var i=0;i<(this.data.length);++i){var prevValue=this.data[i-1],nextValue=this.data[i+1],currentValue=this.data[i],prevTotal=total;total+=parseFloat(this.data[i])||0;var height=ma.abs((this.data[i]/(this.scale.max-this.scale.min))*this.graphHeight);if(RG.SVG.isNull(prevValue)){if(currentValue>0){y=this.getYCoord(prevTotal)-height;}else{y=this.getYCoord(prevTotal);}}else{if(i==0&&this.data[i]>0){y=y-height;}else if(this.data[i]>0&&this.data[i-1]>0){y=y-height;}else if(this.data[i]>0&&this.data[i-1]<0){y=y+prevHeight-height;}else if(this.data[i]<0&&this.data[i-1]>0){}else if(this.data[i]<0&&this.data[i-1]<0){y=y+prevHeight;}}\nvar fill=this.data[i]>0?prop.colors[0]:prop.colors[1];if(prop.colorsSequential){fill=prop.colors[i];}\nif(prop.total){if(i===(this.data.length-1)&&this.data[this.data.length-1]>=0){y=this.getYCoord(0)-height;if(!prop.colorsSequential){fill=prop.colors[2];}}else if(i===(this.data.length-1)&&this.data[this.data.length-1]<0){y=this.getYCoord(0);if(!prop.colorsSequential){fill=prop.colors[2];}}}\nvar x=prop.gutterLeft+(outerWidth*i)+prop.hmargin;if(this.data[i]===null||typeof this.data[i]==='undefined'){var axisY=this.getYCoord(0);if(prevValue<0){y=prevY+prevHeight;}else{y=prevY;}\nheight=this.getYCoord(0)-this.getYCoord(total);if(!prop.colorsSequential){fill=prop.colors[3]||prop.colors[2];}\nif(height<0){y+=height;height*=-1;}}\nvar rect=RG.SVG.create({svg:this.svg,type:'rect',parent:this.svg.all,attr:{x:x,y:y,width:innerWidth,height:height,stroke:prop.strokestyle,fill:fill,'stroke-width':prop.linewidth,'shape-rendering':'crispEdges','data-index':i,'data-original-x':x,'data-original-y':y,'data-original-width':innerWidth,'data-original-height':height,'data-original-stroke':prop.strokestyle,'data-original-fill':fill,'data-value':String(this.data[i])}});this.coords.push({object:this,element:rect,x:x,y:y,width:innerWidth,height:height});if(!RG.SVG.isNull(prop.tooltips)&&prop.tooltips[i]){var obj=this;(function(idx)\n{rect.addEventListener(prop.tooltipsEvent.replace(/^on/,''),function(e)\n{obj.removeHighlight();RG.SVG.tooltip({object:obj,index:idx,text:prop.tooltips[idx],event:e});obj.highlight(e.target);},false);rect.addEventListener('mousemove',function(e)\n{e.target.style.cursor='pointer'},false);})(i);}\nvar prevX=x,prevY=y,prevWidth=innerWidth,prevHeight=height,prevValue=this.data[i];}\nfor(var i=0;i<this.coords.length;++i){if(this.coords[i+1]&&this.coords[i+1].element){var x1=Number(this.coords[i].element.getAttribute('x'))+Number(this.coords[i].element.getAttribute('width')),y1=parseInt(this.coords[i].element.getAttribute('y'))+(this.data[i]>0?0:parseInt(this.coords[i].element.getAttribute('height'))),x2=x1+(2*prop.hmargin),y2=parseInt(this.coords[i].element.getAttribute('y'))+(this.data[i]>0?0:parseInt(this.coords[i].element.getAttribute('height')));if(this.coords[i].element.getAttribute('data-value')==='null'){y1=parseFloat(this.coords[i].element.getAttribute('y'));y2=parseFloat(y1);}\nvar line=RG.SVG.create({svg:this.svg,type:'line',parent:this.svg.all,attr:{x1:x1,y1:y1+0.5,x2:x2,y2:y2+0.5,stroke:prop.strokestyleConnector||prop.strokestyle,'stroke-width':prop.linewidth,'data-index':i,'data-original-x1':x1,'data-original-y1':y1+0.5,'data-original-x2':x2,'data-original-y2':y2+0.5}});}}};this.getYCoord=function(value)\n{var prop=this.properties;if(value>this.scale.max){return null;}\nvar y,xaxispos=prop.xaxispos;if(value<this.scale.min){return null;}\ny=((value-this.scale.min)/(this.scale.max-this.scale.min));y*=(this.height-prop.gutterTop-prop.gutterBottom);y=this.height-prop.gutterBottom-y;return y;};this.highlight=function(rect)\n{var x=rect.getAttribute('x'),y=rect.getAttribute('y'),width=rect.getAttribute('width'),height=rect.getAttribute('height');var highlight=RG.SVG.create({svg:this.svg,type:'rect',parent:this.svg.all,attr:{stroke:prop.highlightStroke,fill:prop.highlightFill,x:x,y:y,width:width,height:height,'stroke-width':prop.highlightLinewidth},style:{pointerEvents:'none'}});RG.SVG.REG.set('highlight',highlight);};this.parseColors=function()\n{if(!Object.keys(this.originalColors).length){this.originalColors={colors:RG.SVG.arrayClone(prop.colors),backgroundGridColor:RG.SVG.arrayClone(prop.backgroundGridColor),highlightFill:RG.SVG.arrayClone(prop.highlightFill),backgroundColor:RG.SVG.arrayClone(prop.backgroundColor)}}\nvar colors=prop.colors;if(colors){for(var i=0;i<colors.length;++i){colors[i]=RG.SVG.parseColorLinear({object:this,color:colors[i]});}}\nprop.backgroundGridColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundGridColor});prop.highlightFill=RG.SVG.parseColorLinear({object:this,color:prop.highlightFill});prop.backgroundColor=RG.SVG.parseColorLinear({object:this,color:prop.backgroundColor});};this.drawLabelsAbove=function()\n{if(prop.labelsAbove){var total=0;for(var i=0;i<this.coords.length;++i){var num=this.data[i],total=total+num;if(typeof num==='number'||RG.SVG.isNull(num)){if(RG.SVG.isNull(num)){num=total;}\nvar str=RG.SVG.numberFormat({object:this,num:num.toFixed(prop.labelsAboveDecimals),prepend:typeof prop.labelsAboveUnitsPre==='string'?prop.labelsAboveUnitsPre:null,append:typeof prop.labelsAboveUnitsPost==='string'?prop.labelsAboveUnitsPost:null,point:typeof prop.labelsAbovePoint==='string'?prop.labelsAbovePoint:null,thousand:typeof prop.labelsAboveThousand==='string'?prop.labelsAboveThousand:null,formatter:typeof prop.labelsAboveFormatter==='function'?prop.labelsAboveFormatter:null});if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&(typeof prop.labelsAboveSpecific[i]==='string'||typeof prop.labelsAboveSpecific[i]==='number')){str=prop.labelsAboveSpecific[i];}else if(prop.labelsAboveSpecific&&prop.labelsAboveSpecific.length&&typeof prop.labelsAboveSpecific[i]!=='string'&&typeof prop.labelsAboveSpecific[i]!=='number'){continue;}\nvar x=parseFloat(this.coords[i].element.getAttribute('x'))+parseFloat(this.coords[i].element.getAttribute('width')/2)+prop.labelsAboveOffsetx;if(this.data[i]>=0){var y=parseFloat(this.coords[i].element.getAttribute('y'))-7+prop.labelsAboveOffsety;var valign=prop.labelsAboveValign;}else{var y=parseFloat(this.coords[i].element.getAttribute('y'))+parseFloat(this.coords[i].element.getAttribute('height'))+7-prop.labelsAboveOffsety;var valign=prop.labelsAboveValign==='top'?'bottom':'top';}\nif(i===(this.coords.length-1)){var font=prop.labelsAboveLastFont||prop.labelsAboveFont||prop.textFont,size=prop.labelsAboveLastSize||prop.labelsAboveSize||prop.textSize,color=prop.labelsAboveLastColor||prop.labelsAboveColor||prop.textColor,background=prop.labelsAboveLastBackground||prop.labelsAboveBackground||null,padding=(typeof prop.labelsAboveLastBackgroundPadding==='number'?prop.labelsAboveLastBackgroundPadding:prop.labelsAboveBackgroundPadding)||0;if(typeof prop.labelsAboveLastBold==='boolean'){var bold=prop.labelsAboveLastBold;}else if(typeof prop.labelsAboveBold==='boolean'){var bold=prop.labelsAboveBold;}else{var bold=prop.textBold;}\nif(typeof prop.labelsAboveLastItalic==='boolean'){var italic=prop.labelsAboveLastItalic;}else if(typeof prop.labelsAboveItalic==='boolean'){var italic=prop.labelsAboveItalic;}else{var italic=prop.textItalic;}}else{var font=prop.labelsAboveFont||prop.textFont,size=prop.labelsAboveSize||prop.textSize,color=prop.labelsAboveColor||prop.textColor,background=prop.labelsAboveBackground||null,padding=prop.labelsAboveBackgroundPadding||0;if(typeof prop.labelsAboveBold==='boolean'){var bold=prop.labelsAboveBold;}else{var bold=prop.textBold;}\nif(typeof prop.labelsAboveItalic==='boolean'){var italic=prop.labelsAboveItalic;}else{var italic=prop.textItalic;}}\nRG.SVG.text({object:this,parent:this.svg.all,tag:'labels.above',text:str,x:x,y:y,halign:prop.labelsAboveHalign,valign:valign,font:font,size:size,bold:bold,italic:italic,color:color,background:background,padding:padding});}}}};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nRG.SVG.addCustomEventListener(this,type,func);return this;};this.exec=function(func)\n{func(this);return this;};this.removeHighlight=function()\n{var highlight=RG.SVG.REG.get('highlight');if(highlight&&highlight.parentNode){highlight.parentNode.removeChild(highlight);}\nRG.SVG.REG.set('highlight',null);};this.grow=function()\n{var opt=arguments[0]||{},frames=opt.frames||30,frame=0,obj=this,data=[],height=null,seq=0;return this;};this.wave=function()\n{return this;};for(i in conf.options){if(typeof i==='string'){this.set(i,conf.options[i]);}}};return this;})(window,document);"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.thermometer.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Thermometer=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext?this.canvas.getContext('2d'):null;this.canvas.__object__=this;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.type='thermometer';this.isRGraph=true;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.coords=[];this.graphArea=[];this.currentValue=null;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.linewidth':1,'chart.background.color':'white','chart.strokestyle':'black','chart.colors':['Gradient(#c00:red:#f66:#fcc)'],'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.ticksize':2,'chart.text.color':'black','chart.text.font':'Arial, Verdana, sans-serif','chart.text.size':12,'chart.text.bold':false,'chart.text.italic':false,'chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.numticks':10,'chart.units.pre':'','chart.units.post':'','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.title':'','chart.title.side':'','chart.title.side.bold':true,'chart.title.side.font':null,'chart.shadow':true,'chart.shadow.offsetx':0,'chart.shadow.offsety':0,'chart.shadow.blur':15,'chart.shadow.color':'#ddd','chart.resizable':false,'chart.contextmenu':null,'chart.adjustable':false,'chart.value.label':true,'chart.value.label.color':null,'chart.value.label.font':null,'chart.value.label.size':null,'chart.value.label.bold':null,'chart.value.label.italic':null,'chart.value.label.decimals':null,'chart.value.label.thousand':',','chart.value.label.point':'.','chart.labels.count':5,'chart.scale.visible':false,'chart.scale.decimals':0,'chart.annotatable':false,'chart.annotate.color':'black','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.tooltips':null,'chart.tooltips.highlight':true,'chart.tooltips.effect':'fade','chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.clearto':'rgba(0,0,0,0)','chart.bulb.bottom.radius.adjust':0,'chart.bulb.bottom.radius':null}\nif(!this.canvas){alert('[THERMOMETER] No canvas support');return;}\nthis.$0={};if(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.ylabels.count'){name='chart.labels.count';}\nprop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name];};this.draw=this.Draw=function()\n{RG.fireCustomEvent(this,'onbeforedraw');this.value=ma.min(this.max,this.value);this.value=ma.max(this.min,this.value);if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.currentValue=this.value;this.coordsText=[];this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.scale2=RG.getScale2(this,{max:this.max,min:this.min,strict:true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});this.x=this.gutterLeft;this.width=ca.width-this.gutterLeft-this.gutterRight;this.y=this.gutterTop+(this.width/2);this.halfWidth=this.width/2;this.bulbTopCenterx=this.gutterLeft+(this.width/2);this.bulbTopCentery=this.gutterTop+(this.width/2);this.bulbTopRadius=this.width/2;this.bulbBottomCenterx=this.gutterLeft+(this.width/2);this.bulbBottomRadius=typeof prop['chart.bulb.bottom.radius']==='number'?prop['chart.bulb.bottom.radius']:this.width*0.75+prop['chart.bulb.bottom.radius.adjust'];this.bulbBottomCentery=ca.height-this.gutterBottom-this.bulbBottomRadius;this.scaleTopY=this.bulbTopCentery;this.scaleBottomY=this.bulbBottomCentery-this.bulbBottomRadius;this.scaleHeight=this.scaleBottomY-this.scaleTopY;this.height=this.getYCoord(this.min)-this.getYCoord(this.value);this.coords[0]=[this.x,this.getYCoord(this.value),this.width,this.height];this.drawBackground();this.drawBar();this.drawTickMarks();this.drawLabels();if(prop['chart.title']){this.drawTitle();}\nif(prop['chart.title.side']){this.drawSideTitle();}\nif(prop['chart.resizable']){RG.allowResizing(this);}\nif(prop['chart.contextmenu']){RG.showContext(this);}\nRG.installEventListeners(this);if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.fireCustomEvent(this,'ondraw');return this;};this.drawBackground=this.DrawBackground=function()\n{if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nthis.pathBackground();co.strokeStyle=prop['chart.strokestyle'];co.fillStyle=prop['chart.background.color'];co.lineWidth=1+prop['chart.linewidth'];co.stroke();co.fill();co.lineWidth=1;};this.drawBar=this.DrawBar=function()\n{this.pathBar();pa2(co,'f %',prop['chart.colors'][0]);};this.pathBar=function()\n{var barHeight=this.coords[0][3],y=(this.coords[0][1]+this.coords[0][3])-barHeight\nRG.noShadow(this);pa2(co,'b r % % % % a % % % 0 6.28 false',this.coords[0][0],y,this.coords[0][2],this.bulbBottomCentery-y,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomRadius);};this.pathBackground=function()\n{pa2(this.context,'b   r % % % %   a % % % 0 6.28 false   m % %   a % % % 0 6.28 false',this.x,this.scaleTopY,this.coords[0][2],this.bulbBottomCentery-this.scaleTopY,this.bulbTopCenterx,this.bulbTopCentery,this.bulbTopRadius,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomCenterx,this.bulbBottomCentery,this.bulbBottomRadius);};this.drawTickMarks=this.DrawTickMarks=function()\n{if(prop['chart.numticks']){var ticksize=prop['chart.ticksize'];co.strokeStyle=prop['chart.strokestyle'];co.lineWidth=prop['chart.linewidth']/2;co.beginPath();for(var i=0;i<=prop['chart.numticks'];++i){var y=this.scaleBottomY-((this.scaleHeight/prop['chart.numticks'])*i);co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft+ticksize,ma.round(y));co.moveTo(ca.width-this.gutterRight,ma.round(y));co.lineTo(ca.width-this.gutterRight-ticksize,ma.round(y));}\nco.stroke();co.lineWidth=1;}};this.drawLabels=this.DrawLabels=function()\n{if(prop['chart.value.label']){co.fillStyle=typeof prop['chart.value.label.color']==='string'?prop['chart.value.label.color']:prop['chart.text.color'];var text=prop['chart.scale.visible']?RG.numberFormat(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals'])):RG.numberFormat(this,this.value.toFixed(typeof prop['chart.value.label.decimals']=='number'?prop['chart.value.label.decimals']:prop['chart.scale.decimals']),prop['chart.units.pre'],prop['chart.units.post']);RG.text2(this,{font:typeof prop['chart.value.label.font']==='string'?prop['chart.value.label.font']:prop['chart.text.font'],size:typeof prop['chart.value.label.size']==='number'?prop['chart.value.label.size']:prop['chart.text.size'],x:this.coords[0][0]+(this.coords[0][2]/2),y:this.coords[0][1]+7,text:text,bold:typeof prop['chart.value.label.bold']==='boolean'?prop['chart.value.label.bold']:prop['chart.text.bold'],italic:typeof prop['chart.value.label.italic']==='boolean'?prop['chart.value.label.italic']:prop['chart.text.italic'],valign:'top',halign:'center',bounding:true,boundingFill:'white',tag:'value.label'});}\nif(prop['chart.scale.visible']){this.drawScale();}};this.drawTitle=this.DrawTitle=function()\n{co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:prop['chart.text.font'],size:prop['chart.text.size']+2,x:this.gutterLeft+(this.width/2),y:this.gutterTop-3,text:String(prop['chart.title']),valign:'bottom',halign:'center',bold:true,tag:'title'});};this.drawSideTitle=this.DrawSideTitle=function()\n{var font=prop['chart.title.side.font']?prop['chart.title.side.font']:prop['chart.text.font'];var size=prop['chart.title.side.size']?prop['chart.title.side.size']:prop['chart.text.size']+2;co.fillStyle=prop['chart.text.color'];RG.text2(this,{font:font,size:size+2,x:this.gutterLeft-3,y:(this.scaleHeight/2)+this.gutterTop+this.bulbTopRadius,text:String(prop['chart.title.side']),valign:'bottom',halign:'center',angle:270,bold:prop['chart.title.side.bold'],tag:'title.side',accessible:false});};this.drawScale=this.DrawScale=function()\n{co.fillStyle=prop['chart.text.color'];var font=prop['chart.text.font'],italic=prop['chart.text.italic'],bold=prop['chart.text.bold'],size=prop['chart.text.size'],color=prop['chart.text.color'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],decimals=prop['chart.scale.decimals'],numLabels=prop['chart.labels.count'],step=(this.max-this.min)/numLabels;for(var i=1;i<=numLabels;++i){var x=ca.width-this.gutterRight+(prop['chart.linewidth']/2),y=ca.height-this.gutterBottom-(2*this.bulbBottomRadius)-((this.scaleHeight/numLabels)*i),text=RG.numberFormat(this,String((this.min+(i*step)).toFixed(decimals)),units_pre,units_post);RG.text2(this,{font:font,size:size,x:x+6,y:y,text:text,valign:'center',tag:'scale',bold:bold,italic:italic,color:color});}\nRG.text2(this,{font:font,size:size,x:x+6,y:this.bulbBottomCentery-this.bulbBottomRadius,text:RG.numberFormat(this,this.min.toFixed(decimals),units_pre,units_post),valign:'center',tag:'scale'});};this.getShape=this.getBar=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];for(var i=0;i<this.coords.length;i++){var coords=this.coords[i],left=coords[0],top=coords[1],width=coords[2],height=coords[3];this.pathBar();if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText?RG.parseTooltipText(prop['chart.tooltips'],i):'';return{0:this,object:this,1:left,x:left,2:top,y:top,3:width,width:width,4:height,height:height,5:i,index:i,tooltip:tooltip};}}\nreturn null;};this.getValue=function(arg)\n{if(arg.length===2){var mouseX=arg[0],mouseY=arg[1];}else{var mouseXY=RG.getMouseXY(arg),mouseX=mouseXY[0],mouseY=mouseXY[1];}\nvar value=(this.scaleHeight-(mouseY-this.scaleTopY))/this.scaleHeight;value*=(this.max-this.min);value+=this.min;value=ma.max(value,this.min);value=ma.min(value,this.max);return value;};this.highlight=this.Highlight=function(shape)\n{if(prop['chart.tooltips.highlight']){if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);return;}\nthis.pathBar();pa2(co,'s % f %',prop['chart.highlight.stroke'],prop['chart.highlight.fill']);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]\nthis.pathBackground();if(co.isPointInPath(mouseX,mouseY)){return this;}};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RG.getMouseXY(e),value=this.getValue(e);if(typeof(value)=='number'){RG.fireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.redrawCanvas(ca);}}};this.getYCoord=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar y=ma.abs(value-this.min)/ma.abs(this.max-this.min)\ny=y*(this.scaleBottomY-this.scaleTopY);return this.scaleBottomY-y;};this.overChartArea=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];this.pathBackground();return co.isPointInPath(mouseX,mouseY);};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.arrayClone(prop['chart.colors']);}\nvar colors=prop['chart.colors'];for(var i=0;i<colors.length;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(prop['chart.gutter.left'],0,ca.width-prop['chart.gutter.right'],0);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1;j<parts.length;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var obj=this,callback=arguments[1]||function(){},opt=arguments[0]||{},frames=opt.frames?opt.frames:30,origValue=Number(obj.currentValue),newValue=obj.value;newValue=ma.min(newValue,this.max);newValue=ma.max(newValue,this.min);var diff=newValue-origValue,step=(diff/frames),frame=0;function iterate()\n{obj.value=(step*frame)+origValue;RG.clear(obj.canvas);RG.redrawCanvas(obj.canvas);if(frame<frames){frame++;RG.Effects.updateCanvas(iterate);}else{callback(obj);}}\niterate();return this;};RG.register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.vprogress.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.VProgress=function(conf)\n{if(typeof conf==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:arguments[0],min:arguments[1],max:arguments[2],value:arguments[3]}}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext('2d');this.canvas.__object__=this;this.min=RGraph.stringsToNumbers(conf.min);this.max=RGraph.stringsToNumbers(conf.max);this.value=RGraph.stringsToNumbers(conf.value);this.type='vprogress';this.coords=[];this.isRGraph=true;this.currentValue=null;this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.colors':['Gradient(white:#0c0)','Gradient(white:red)','Gradient(white:green)','yellow','pink','cyan','black','white','gray'],'chart.strokestyle.inner':'#999','chart.strokestyle.outer':'#999','chart.tickmarks':true,'chart.tickmarks.zerostart':true,'chart.tickmarks.color':'#999','chart.tickmarks.inner':false,'chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.numticks':10,'chart.numticks.inner':50,'chart.background.color':'Gradient(#ccc:#eee:#efefef)','chart.shadow':false,'chart.shadow.color':'rgba(0,0,0,0.5)','chart.shadow.blur':3,'chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.title':'','chart.title.bold':true,'chart.title.font':null,'chart.title.size':null,'chart.title.color':'black','chart.title.side':null,'chart.title.side.font':'Arial, Verdana, sans-serif','chart.title.side.size':12,'chart.title.side.color':'black','chart.title.side.bold':true,'chart.text.size':12,'chart.text.color':'black','chart.text.font':'Segoe UI, Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.highlight':true,'chart.tooltips.event':'onclick','chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.zoom.action':'zoom','chart.arrows':false,'chart.margin':0,'chart.resizable':false,'chart.resize.handle.adjust':[0,0],'chart.resize.handle.background':null,'chart.label.inner':false,'chart.labels.count':10,'chart.labels.position':'right','chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.adjustable':false,'chart.scale.decimals':0,'chart.scale.thousand':',','chart.scale.point':'.','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'#000','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.events.click':null,'chart.events.mousemove':null,'chart.border.inner':true,'chart.clearto':'rgba(0,0,0,0)'}\nif(!this.canvas){alert('[PROGRESS] No canvas support');return;}\nvar linear_data=RGraph.arrayLinearize(this.value);for(var i=0;i<linear_data.length;++i){this['$'+i]={};}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nif(name=='chart.strokestyle'){prop['chart.strokestyle.inner']=value;prop['chart.strokestyle.outer']=value;return;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nprop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RG.FireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nthis.currentValue=this.value;this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.width=ca.width-this.gutterLeft-this.gutterRight;this.height=ca.height-this.gutterTop-this.gutterBottom;this.coords=[];this.coordsText=[];this.Drawbar();this.DrawTickMarks();this.DrawLabels();this.DrawTitles();if(prop['chart.bevel']){this.DrawBevel();}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nRG.InstallEventListeners(this);if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nthis.AllowAdjusting();if(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.drawbar=this.Drawbar=function()\n{this.scale2=RG.getScale2(this,{'max':this.max,'min':this.min,'strict':true,'scale.thousand':prop['chart.scale.thousand'],'scale.point':prop['chart.scale.point'],'scale.decimals':prop['chart.scale.decimals'],'ylabels.count':prop['chart.labels.count'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post']});if(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}\nco.fillStyle=prop['chart.background.color'];co.strokeStyle=prop['chart.strokestyle.outer'];co.strokeRect(this.gutterLeft,this.gutterTop,this.width,this.height);co.fillRect(this.gutterLeft,this.gutterTop,this.width,this.height);RG.noShadow(this);co.strokeStyle=prop['chart.strokestyle.outer'];co.fillStyle=prop['chart.colors'][0];var margin=prop['chart.margin'];var barHeight=(ca.height-this.gutterTop-this.gutterBottom)*((RG.arraySum(this.value)-this.min)/(this.max-this.min));if(typeof this.value==='number'){co.lineWidth=1;co.strokeStyle=prop['chart.strokestyle.inner'];if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+(this.height-barHeight),width:this.width-margin-margin,height:barHeight,stroke:prop['chart.strokestyle.inner']});}\nthis.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+(this.height-barHeight),width:this.width-margin-margin,height:barHeight,fill:prop['chart.colors'][0]});}else if(typeof this.value=='object'){co.beginPath();co.strokeStyle=prop['chart.strokestyle.inner'];var startPoint=ca.height-this.gutterBottom;for(var i=0,len=this.value.length;i<len;++i){var segmentHeight=((this.value[i]-this.min)/(this.max-this.min))*(ca.height-this.gutterBottom-this.gutterTop);co.fillStyle=prop['chart.colors'][i];co.beginPath();if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:startPoint-segmentHeight,width:this.width-margin-margin,height:segmentHeight,stroke:co.strokeStyle});}\nthis.drawCurvedBar({x:this.gutterLeft+margin,y:startPoint-segmentHeight,width:this.width-margin-margin,height:segmentHeight,fill:co.fillStyle});this.coords.push([this.gutterLeft+margin,startPoint-segmentHeight,this.width-margin-margin,segmentHeight]);startPoint-=segmentHeight;}\nco.fill();}\nif(prop['chart.tickmarks.inner']){var spacing=(ca.height-this.gutterTop-this.gutterBottom)/prop['chart.numticks.inner'];co.lineWidth=1;co.strokeStyle=prop['chart.strokestyle.outer'];co.beginPath();for(var y=this.gutterTop;y<ca.height-this.gutterBottom;y+=spacing){co.moveTo(this.gutterLeft,Math.round(y));co.lineTo(this.gutterLeft+3,Math.round(y));co.moveTo(ca.width-this.gutterRight,Math.round(y));co.lineTo(ca.width-this.gutterRight-3,Math.round(y));}\nco.stroke();}\nco.beginPath();co.strokeStyle=prop['chart.strokestyle.inner'];if(typeof this.value=='number'){if(prop['chart.border.inner']){this.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+this.height-barHeight,width:this.width-margin-margin,height:barHeight});}\nthis.drawCurvedBar({x:this.gutterLeft+margin,y:this.gutterTop+this.height-barHeight,width:this.width-margin-margin,height:barHeight});this.coords.push([this.gutterLeft+margin,this.gutterTop+this.height-barHeight,this.width-margin-margin,barHeight]);}\nif(prop['chart.arrows']){var x=this.gutterLeft-4;var y=ca.height-this.gutterBottom-barHeight;co.lineWidth=1;co.fillStyle='black';co.strokeStyle='black';co.beginPath();co.moveTo(x,y);co.lineTo(x-4,y-2);co.lineTo(x-4,y+2);co.closePath();co.stroke();co.fill();x+=this.width+8;co.beginPath();co.moveTo(x,y);co.lineTo(x+4,y-2);co.lineTo(x+4,y+2);co.closePath();co.stroke();co.fill();pa2(co,'b');}\nif(prop['chart.label.inner']){co.fillStyle='black';RG.text2(this,{'font':prop['chart.text.font'],'size':prop['chart.text.size'],'x':((ca.width-this.gutterLeft-this.gutterRight)/2)+this.gutterLeft,'y':this.coords[this.coords.length-1][1]-5,'text':RGraph.number_format(this,(typeof(this.value)=='number'?this.value:RG.array_sum(this.value)).toFixed(prop['chart.scale.decimals'])),'valign':'bottom','halign':'center','bounding':true,'boundingFill':'white','tag':'label.inner'});}};this.drawTickMarks=this.DrawTickMarks=function()\n{co.strokeStyle=prop['chart.tickmarks.color'];if(prop['chart.tickmarks']){co.beginPath();for(var i=0;prop['chart.tickmarks.zerostart']?i<=prop['chart.numticks']:i<prop['chart.numticks'];i++){var startX=prop['chart.labels.position']=='left'?this.gutterLeft:ca.width-prop['chart.gutter.right'];var endX=prop['chart.labels.position']=='left'?startX-4:startX+4;var yPos=(this.height*(i/prop['chart.numticks']))+this.gutterTop\nco.moveTo(startX,ma.round(yPos));co.lineTo(endX,ma.round(yPos));}\nco.stroke();}};this.drawLabels=this.DrawLabels=function()\n{if(!RG.is_null(prop['chart.labels.specific'])){return this.DrawSpecificLabels();}\nco.fillStyle=prop['chart.text.color'];var position=prop['chart.labels.position'].toLowerCase();var xAlignment=position=='left'?'right':'left';var yAlignment='center';var count=prop['chart.labels.count'];var units_pre=prop['chart.units.pre'];var units_post=prop['chart.units.post'];var text_size=prop['chart.text.size'];var text_font=prop['chart.text.font'];var decimals=prop['chart.scale.decimals'];var offsetx=prop['chart.labels.offsetx'];var offsety=prop['chart.labels.offsety'];if(prop['chart.tickmarks']){for(var i=0;i<count;++i){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-7+offsetx):(ca.width-this.gutterRight+7)+offsetx,y:(((ca.height-this.gutterTop-this.gutterBottom)/count)*i)+this.gutterTop+offsety,text:this.scale2.labels[this.scale2.labels.length-(i+1)],valign:yAlignment,halign:xAlignment,tag:'scale'});}\nif(prop['chart.tickmarks.zerostart']&&this.min==0){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-5+offsetx):(ca.width-this.gutterRight+5+offsetx),y:ca.height-this.gutterBottom+offsety,'text':RG.numberFormat(this,this.min.toFixed(this.min===0?0:decimals),units_pre,units_post),valign:yAlignment,halign:xAlignment,tag:'scale'});}\nif(this.min!=0){RG.text2(this,{font:text_font,size:text_size,x:position=='left'?(this.gutterLeft-5+offsetx):(ca.width-this.gutterRight+5+offsetx),y:ca.height-this.gutterBottom+offsety,text:RG.number_format(this,this.min.toFixed(decimals),units_pre,units_post),valign:yAlignment,halign:xAlignment,tag:'scale'});}}};this.drawTitles=this.DrawTitles=function()\n{var text_size=prop['chart.text.size'];var text_font=prop['chart.text.font'];var title_size=prop['chart.title.size']?prop['chart.title.size']:text_size+2;if(prop['chart.title'].length>0){co.fillStyle=prop['chart.title.color'];RG.text2(this,{'font':prop['chart.title.font']?prop['chart.title.font']:text_font,'size':title_size,'x':this.gutterLeft+((ca.width-this.gutterLeft-this.gutterRight)/2),'y':this.gutterTop-5,'text':prop['chart.title'],'valign':'bottom','halign':'center','bold':prop['chart.title.bold'],'tag':'title'});}\nif(typeof(prop['chart.title.side'])=='string'){co.fillStyle=prop['chart.title.side.color'];RG.Text2(this,{'font':prop['chart.title.side.font'],'size':prop['chart.title.side.size'],'x':prop['chart.labels.position']=='right'?this.gutterLeft-10:(ca.width-this.gutterRight)+10,'y':this.gutterTop+(this.height/2),'text':prop['chart.title.side'],'valign':'bottom','halign':'center','angle':prop['chart.labels.position']=='right'?270:90,'bold':prop['chart.title.side.bold'],'tag':'title.side'});}};this.getShape=this.getBar=function(e)\n{var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1]\nfor(var i=0,len=this.coords.length;i<len;i++){var x=this.coords[i][0],y=this.coords[i][1],w=this.coords[i][2],h=this.coords[i][3],idx=i;co.beginPath();this.drawCurvedBar({x:x,y:y,width:w,height:h});if(co.isPointInPath(mouseX,mouseY)){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,'object':this,1:x,'x':x,2:y,'y':y,3:w,'width':w,4:h,'height':h,5:i,'index':i,'tooltip':tooltip};}}};this.getValue=function(e)\n{var mouseCoords=RG.getMouseXY(e);var mouseX=mouseCoords[0];var mouseY=mouseCoords[1];var value=(this.height-(mouseY-this.gutterTop))/this.height;value*=this.max-this.min;value+=this.min;if(value>this.max)value=this.max;if(value<this.min)value=this.min;return value;};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{var last=shape.index===this.coords.length-1;this.drawCurvedBar({x:shape.x,y:shape.y,width:shape.width,height:shape.height,stroke:prop['chart.highlight.stroke'],fill:prop['chart.highlight.fill']});}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>=this.gutterTop&&mouseXY[1]<=(ca.height-this.gutterBottom)){return this;}};this.allowAdjusting=this.AllowAdjusting=function(){return;};this.adjusting_mousemove=this.Adjusting_mousemove=function(e)\n{if(prop['chart.adjustable']&&RG.Registry.Get('chart.adjusting')&&RG.Registry.Get('chart.adjusting').uid==this.uid){var mouseXY=RG.getMouseXY(e);var value=this.getValue(e);if(typeof value==='number'){RG.FireCustomEvent(this,'onadjust');this.value=Number(value.toFixed(prop['chart.scale.decimals']));RG.RedrawCanvas(this.canvas);}}};this.drawSpecificLabels=this.DrawSpecificLabels=function()\n{var labels=prop['chart.labels.specific'];if(labels){var font=prop['chart.text.font'];var size=prop['chart.text.size'];var halign=prop['chart.labels.position']=='right'?'left':'right';var step=this.height/(labels.length-1);co.beginPath();co.fillStyle=prop['chart.text.color'];for(var i=0;i<labels.length;++i){RG.Text2(this,{'font':font,'size':size,'x':prop['chart.labels.position']=='right'?ca.width-this.gutterRight+7:this.gutterLeft-7,'y':(this.height+this.gutterTop)-(step*i),'text':labels[i],'valign':'center','halign':halign,'tag':'labels.specific'});}\nco.fill();}};this.getYCoord=function(value)\n{if(value>this.max||value<this.min){return null;}\nvar barHeight=ca.height-prop['chart.gutter.top']-prop['chart.gutter.bottom'];var coord=((value-this.min)/(this.max-this.min))*barHeight;coord=ca.height-coord-prop['chart.gutter.bottom'];return coord;};this.overChartArea=function(e)\n{var mouseXY=RGraph.getMouseXY(e);var mouseX=mouseXY[0];var mouseY=mouseXY[1];if(mouseX>=this.gutterLeft&&mouseX<=(ca.width-this.gutterRight)&&mouseY>=this.gutterTop&&mouseY<=(ca.height-this.gutterBottom)){return true;}\nreturn false;};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.tickmarks.color']=RG.array_clone(prop['chart.tickmarks.color']);this.original_colors['chart.strokestyle.inner']=RG.array_clone(prop['chart.strokestyle.inner']);this.original_colors['chart.strokestyle.outer']=RG.array_clone(prop['chart.strokestyle.outer']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.color']=RG.array_clone(prop['chart.highlight.color']);}\nvar colors=prop['chart.colors'];for(var i=0,len=colors.length;i<len;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}\nprop['chart.tickmarks.color']=this.parseSingleColorForGradient(prop['chart.tickmarks.color']);prop['chart.strokestyle.inner']=this.parseSingleColorForGradient(prop['chart.strokestyle.inner']);prop['chart.strokestyle.outer']=this.parseSingleColorForGradient(prop['chart.strokestyle.outer']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.background.color']=this.parseSingleColorForGradient(prop['chart.background.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof color!='string'){return color;}\nif(color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}\nreturn grad?grad:color;}\nreturn grad?grad:color;};this.drawBevel=this.DrawBevel=function()\n{for(var i=0,height=0;i<this.coords.length;++i){height+=this.coords[i][3];}\nco.save();co.beginPath();co.rect(this.coords[0][0],this.coords[this.coords.length-1][1]-1,this.coords[0][2],height);co.clip();co.save();co.beginPath();this.drawCurvedBar({x:this.coords[0][0],y:this.coords[this.coords.length-1][1]-1,width:this.coords[0][2],height:height});co.clip();co.beginPath();co.shadowColor='black';co.shadowOffsetX=0;co.shadowOffsetY=0;co.shadowBlur=15;co.lineWidth=2;this.drawCurvedBar({x:this.coords[0][0]-1,y:this.coords[this.coords.length-1][1]-1,width:this.coords[0][2]+2,height:height+2+100});co.stroke();co.restore();co.restore();};this.interactiveKeyHighlight=function(index)\n{var coords=this.coords[index];co.beginPath();co.strokeStyle=prop['chart.key.interactive.highlight.chart.stroke'];co.lineWidth=2;co.fillStyle=prop['chart.key.interactive.highlight.chart.fill'];co.rect(coords[0],coords[1],coords[2],coords[3]);co.fill();co.stroke();co.lineWidth=1;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.drawCurvedBar=function(opt)\n{pa2(co,'b r % % % %',opt.x,opt.y,opt.width,opt.height);if(opt.stroke){co.strokeStyle=opt.stroke;co.stroke();}\nif(opt.fill){co.fillStyle=opt.fill;co.fill();}}\nthis.firstDrawFunc=function()\n{};this.exec=function(func)\n{func(this);return this;};this.grow=function()\n{var obj=this;var canvas=obj.canvas;var context=obj.context;var initial_value=obj.currentValue;var opt=arguments[0]||{};var numFrames=opt.frames||30;var frame=0\nvar callback=arguments[1]||function(){};if(typeof obj.value==='object'){if(RGraph.is_null(obj.currentValue)){obj.currentValue=[];for(var i=0;i<obj.value.length;++i){obj.currentValue[i]=0;}}\nvar diff=[];var increment=[];for(var i=0;i<obj.value.length;++i){diff[i]=obj.value[i]-Number(obj.currentValue[i]);increment[i]=diff[i]/numFrames;}\nif(initial_value==null){initial_value=[];for(var i=0;i<obj.value.length;++i){initial_value[i]=0;}}}else{var diff=obj.value-Number(obj.currentValue);var increment=diff/numFrames;}\nfunction iterator()\n{frame++;if(frame<=numFrames){if(typeof obj.value=='object'){obj.value=[];for(var i=0;i<initial_value.length;++i){obj.value[i]=initial_value[i]+(increment[i]*frame);}}else{obj.value=initial_value+(increment*frame);}\nRGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);RGraph.Effects.updateCanvas(iterator);}else{callback();}}\niterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}};"
  },
  {
    "path": "docs/RGraph/libraries/RGraph.waterfall.js",
    "content": "\nRGraph=window.RGraph||{isRGraph:true};RGraph.Waterfall=function(conf)\n{if(typeof conf==='object'&&typeof conf.data==='object'&&typeof conf.id==='string'){var parseConfObjectForOptions=true;}else{var conf={id:conf,data:arguments[1]};}\nthis.id=conf.id;this.canvas=document.getElementById(this.id);this.context=this.canvas.getContext?this.canvas.getContext(\"2d\"):null;this.canvas.__object__=this;this.type='waterfall';this.max=0;this.data=conf.data;this.isRGraph=true;this.coords=[];this.uid=RGraph.CreateUID();this.canvas.uid=this.canvas.uid?this.canvas.uid:RGraph.CreateUID();this.colorsParsed=false;this.coordsText=[];this.original_colors=[];this.firstDraw=true;this.properties={'chart.background.barcount':null,'chart.background.barcolor1':'rgba(0,0,0,0)','chart.background.barcolor2':'rgba(0,0,0,0)','chart.background.grid':true,'chart.background.grid.color':'#ddd','chart.background.grid.width':1,'chart.background.grid.hsize':20,'chart.background.grid.vsize':20,'chart.background.grid.vlines':true,'chart.background.grid.hlines':true,'chart.background.grid.border':true,'chart.background.grid.autofit':true,'chart.background.grid.autofit.align':true,'chart.background.grid.autofit.numhlines':5,'chart.background.grid.autofit.numvlines':20,'chart.background.image':null,'chart.background.hbars':null,'chart.linewidth':1,'chart.axis.linewidth':1,'chart.xaxispos':'bottom','chart.numxticks':null,'chart.numyticks':10,'chart.hmargin':5,'chart.strokestyle':'#666','chart.axis.color':'black','chart.gutter.left':25,'chart.gutter.right':25,'chart.gutter.top':25,'chart.gutter.bottom':25,'chart.labels':[],'chart.labels.bold':false,'chart.labels.offsetx':0,'chart.labels.offsety':0,'chart.ylabels.offsetx':0,'chart.ylabels.offsety':0,'chart.ylabels':true,'chart.labels.above':false,'chart.labels.above.font':null,'chart.labels.above.size':null,'chart.labels.above.bold':false,'chart.labels.above.italic':false,'chart.labels.above.color':null,'chart.labels.above.offsetx':0,'chart.labels.above.offsety':0,'chart.labels.above.specific':null,'chart.labels.above.decimals':0,'chart.labels.above.units.pre':'','chart.labels.above.units.post':'','chart.labels.above.point':'.','chart.labels.above.thousand':',','chart.labels.above.formatter':null,'chart.labels.above.total.italic':null,'chart.labels.above.total.bold':null,'chart.labels.above.total.size':null,'chart.labels.above.total.font':null,'chart.labels.above.total.color':null,'chart.labels.above.total.decimals':null,'chart.labels.above.total.units.pre':null,'chart.labels.above.total.units.post':null,'chart.labels.above.total.point':null,'chart.labels.above.total.thousand':null,'chart.labels.above.total.formatter':null,'chart.text.color':'black','chart.text.size':12,'chart.text.angle':0,'chart.text.font':'Arial, Verdana, sans-serif','chart.text.accessible':true,'chart.text.accessible.overflow':'visible','chart.text.accessible.pointerevents':false,'chart.ymax':null,'chart.title':'','chart.title.color':'black','chart.title.background':null,'chart.title.hpos':null,'chart.title.vpos':null,'chart.title.bold':true,'chart.title.font':null,'chart.title.xaxis':'','chart.title.yaxis':'','chart.title.yaxis.bold':true,'chart.title.yaxis.size':null,'chart.title.yaxis.font':null,'chart.title.yaxis.color':null,'chart.title.xaxis.pos':null,'chart.title.yaxis.pos':null,'chart.title.yaxis.align':'left','chart.title.xaxis.bold':true,'chart.title.xaxis.size':null,'chart.title.xaxis.font':null,'chart.title.xaxis.color':null,'chart.title.yaxis.x':null,'chart.title.yaxis.y':null,'chart.title.xaxis.x':null,'chart.title.xaxis.y':null,'chart.title.x':null,'chart.title.y':null,'chart.title.halign':null,'chart.title.valign':null,'chart.colors':['green','red','blue'],'chart.colors.sequential':false,'chart.shadow':false,'chart.shadow.color':'#666','chart.shadow.offsetx':3,'chart.shadow.offsety':3,'chart.shadow.blur':3,'chart.tooltips':null,'chart.tooltips.effect':'fade','chart.tooltips.css.class':'RGraph_tooltip','chart.tooltips.event':'onclick','chart.tooltips.highlight':true,'chart.tooltips.override':null,'chart.highlight.stroke':'rgba(0,0,0,0)','chart.highlight.fill':'rgba(255,255,255,0.7)','chart.contextmenu':null,'chart.units.pre':'','chart.units.post':'','chart.scale.decimals':0,'chart.scale.point':'.','chart.scale.thousand':',','chart.scale.zerostart':true,'chart.crosshairs':false,'chart.crosshairs.color':'#333','chart.crosshairs.hline':true,'chart.crosshairs.vline':true,'chart.annotatable':false,'chart.annotate.color':'black','chart.zoom.factor':1.5,'chart.zoom.fade.in':true,'chart.zoom.fade.out':true,'chart.zoom.hdir':'right','chart.zoom.vdir':'down','chart.zoom.frames':25,'chart.zoom.delay':16.666,'chart.zoom.shadow':true,'chart.zoom.background':true,'chart.resizable':false,'chart.resize.handle.background':null,'chart.noaxes':false,'chart.noxaxis':false,'chart.noyaxis':false,'chart.axis.color':'black','chart.total':true,'chart.multiplier.x':1,'chart.multiplier.w':1,'chart.events.click':null,'chart.events.mousemove':null,'chart.ylabels.count':5,'chart.ymin':0,'chart.clearto':'rgba(0,0,0,0)','chart.key':null,'chart.key.background':'white','chart.key.position':'graph','chart.key.halign':'right','chart.key.shadow':false,'chart.key.shadow.color':'#666','chart.key.shadow.blur':3,'chart.key.shadow.offsetx':2,'chart.key.shadow.offsety':2,'chart.key.position.gutter.boxed':false,'chart.key.position.x':null,'chart.key.position.y':null,'chart.key.color.shape':'square','chart.key.rounded':true,'chart.key.linewidth':1,'chart.key.colors':null,'chart.key.interactive':false,'chart.key.interactive.highlight.chart.stroke':'#000','chart.key.interactive.highlight.chart.fill':'rgba(255,255,255,0.7)','chart.key.interactive.highlight.label':'rgba(255,0,0,0.2)','chart.key.text.color':'black','chart.bar.offsetx':0,'chart.bar.offsety':0}\nif(!this.canvas){alert('[WATERFALL] No canvas support');return;}\nfor(var i=0,len=this.data.length;i<=len;++i){this['$'+i]={}\nif(typeof this.data[i]==='string'){this.data[i]=parseFloat(this.data[i]);}}\nif(!this.canvas.__rgraph_aa_translated__){this.context.translate(0.5,0.5);this.canvas.__rgraph_aa_translated__=true;}\nvar RG=RGraph,ca=this.canvas,co=ca.getContext('2d'),prop=this.properties,pa2=RG.path2,win=window,doc=document,ma=Math\nif(RG.Effects&&typeof RG.Effects.decorate==='function'){RG.Effects.decorate(this);}\nthis.set=this.Set=function(name,value)\n{var value=typeof arguments[1]==='undefined'?null:arguments[1];if(arguments.length===1&&typeof name==='object'){RG.parseObjectStyleConfig(this,name);return this;}\nif(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nif(name=='chart.total'&&prop['chart.numxticks']==null){prop['chart.numxticks']=this.data.length;}\nprop[name.toLowerCase()]=value;return this;};this.get=this.Get=function(name)\n{if(name.substr(0,6)!='chart.'){name='chart.'+name;}\nwhile(name.match(/([A-Z])/)){name=name.replace(/([A-Z])/,'.'+RegExp.$1.toLowerCase());}\nreturn prop[name.toLowerCase()];};this.draw=this.Draw=function()\n{RGraph.fireCustomEvent(this,'onbeforedraw');if(!this.colorsParsed){this.parseColors();this.colorsParsed=true;}\nRGraph.DrawBackgroundImage(this);this.gutterLeft=prop['chart.gutter.left'];this.gutterRight=prop['chart.gutter.right'];this.gutterTop=prop['chart.gutter.top'];this.gutterBottom=prop['chart.gutter.bottom'];this.coords=[];this.coordsText=[];this.centery=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;this.max=0;this.grapharea=ca.height-this.gutterTop-this.gutterBottom;this.graphwidth=ca.width-this.gutterLeft-this.gutterRight;this.halfTextHeight=prop['chart.text.size']/2;this.max=this.getMax(this.data);var decimals=prop['chart.scale.decimals'];this.scale2=RG.getScale2(this,{max:typeof(prop['chart.ymax'])=='number'?prop['chart.ymax']:this.max,min:prop['chart.ymin'],strict:typeof(prop['chart.ymax'])==='number'?true:false,'scale.decimals':Number(decimals),'scale.point':prop['chart.scale.point'],'scale.thousand':prop['chart.scale.thousand'],'scale.round':prop['chart.scale.round'],'units.pre':prop['chart.units.pre'],'units.post':prop['chart.units.post'],'ylabels.count':prop['chart.ylabels.count']});this.max=this.scale2.max;this.min=this.scale2.min;RG.drawBars(this)\nRG.Background.draw(this);this.DrawAxes();this.Drawbars();this.DrawLabels();if(prop['chart.xaxispos']==='bottom'&&prop['chart.noaxes']===false&&prop['chart.noxaxis']===false&&prop['chart.ymin']===0){co.strokeStyle=prop['chart.axis.color'];co.strokeRect(prop['chart.gutter.left'],ca.height-prop['chart.gutter.bottom'],ca.width-this.gutterLeft-this.gutterRight,0);}\nif(prop['chart.contextmenu']){RG.ShowContext(this);}\nif(prop['chart.resizable']){RG.AllowResizing(this);}\nRG.InstallEventListeners(this);if(prop['chart.key']&&prop['chart.key'].length){RG.DrawKey(this,prop['chart.key'],prop['chart.colors']);}\nif(this.firstDraw){this.firstDraw=false;RG.fireCustomEvent(this,'onfirstdraw');this.firstDrawFunc();}\nRG.FireCustomEvent(this,'ondraw');return this;};this.drawAxes=this.DrawAxes=function()\n{if(prop['chart.noaxes']){return;}\nco.beginPath();co.strokeStyle=prop['chart.axis.color'];co.lineWidth=prop['chart.axis.linewidth']+0.001;if(prop['chart.noyaxis']==false){co.moveTo(ma.round(this.gutterLeft),this.gutterTop);co.lineTo(ma.round(this.gutterLeft),ca.height-this.gutterBottom);}\nif(prop['chart.noxaxis']==false){if(prop['chart.xaxispos']=='center'){co.moveTo(this.gutterLeft,ma.round(((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop));co.lineTo(ca.width-this.gutterRight,ma.round(((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop));}else{var y=ma.floor(this.getYCoord(0));co.moveTo(this.gutterLeft,y);co.lineTo(ca.width-this.gutterRight,y);}}\nvar numYTicks=prop['chart.numyticks'];if(prop['chart.noyaxis']===false&&prop['chart.numyticks']>0){var yTickGap=(ca.height-this.gutterTop-this.gutterBottom)/numYTicks;for(y=this.gutterTop;y<(ca.height-this.gutterBottom);y+=yTickGap){if(prop['chart.xaxispos']=='bottom'||(y!=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop)){co.moveTo(this.gutterLeft,ma.round(y));co.lineTo(this.gutterLeft-3,ma.round(y));}}\nif(prop['chart.noxaxis']||prop['chart.xaxispos']=='center'||prop['chart.ymin']!==0){co.moveTo(this.gutterLeft-3,Math.round(ca.height-this.gutterBottom));co.lineTo(this.gutterLeft,Math.round(ca.height-this.gutterBottom));}}\nif(prop['chart.numxticks']==null){prop['chart.numxticks']=this.data.length+(prop['chart.total']?1:0)}\nif(prop['chart.noxaxis']==false&&prop['chart.numxticks']>0){xTickGap=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.numxticks'];if(prop['chart.xaxispos']=='center'){yStart=((ca.height-this.gutterBottom-this.gutterTop)/2)+this.gutterTop-3;yEnd=((ca.height-this.gutterBottom-this.gutterTop)/2)+this.gutterTop+3;}else{yStart=this.getYCoord(0)-(this.scale2.min<0?3:0);yEnd=this.getYCoord(0)+3;}\nfor(x=this.gutterLeft+xTickGap;x<=ca.width-this.gutterRight+1;x+=xTickGap){co.moveTo(ma.round(x),yStart);co.lineTo(ma.round(x),yEnd);}\nif(prop['chart.noyaxis']){co.moveTo(ma.round(this.gutterLeft),yStart);co.lineTo(ma.round(this.gutterLeft),yEnd);}}\nif(prop['chart.noyaxis']&&prop['chart.noxaxis']==false){co.moveTo(ma.round(this.gutterLeft),this.getYCoord(0));co.lineTo(ma.round(this.gutterLeft),this.getYCoord(0));}\nco.stroke();};this.drawLabels=this.DrawLabels=function()\n{var context=co,numYLabels=5,interval=this.grapharea/numYLabels,font=prop['chart.text.font'],size=prop['chart.text.size'],color=prop['chart.text.color'],units_pre=prop['chart.units.pre'],units_post=prop['chart.units.post'],offsetx=prop['chart.ylabels.offsetx'],offsety=prop['chart.ylabels.offsety'];co.beginPath();co.fillStyle=color;if(prop['chart.ylabels']){if(prop['chart.xaxispos']=='center'){var halfInterval=interval/2;var halfWay=((ca.height-this.gutterTop-this.gutterBottom)/2)+this.gutterTop;for(var i=0,len=this.scale2.labels.length;i<len;++i){RG.text2(this,{font:font,size:size,x:this.gutterLeft-5+offsetx,y:this.gutterTop+(((this.grapharea/2)/len)*i)+offsety,text:this.scale2.labels[len-i-1],valign:'center',halign:'right',tag:'scale'});RG.text2(this,{font:font,size:size,x:this.gutterLeft-5+offsetx,y:halfWay+(((this.grapharea/2)/len)*(i+1))+offsety,text:this.scale2.labels[i],valign:'center',halign:'right',tag:'scale'});}\nif(prop['chart.scale.zerostart']){RG.text2(co,{x:this.gutterLeft-5+offsetx,y:halfWay,text:'0',font:font,size:size,valign:'center',halign:'right',tag:'scale'});}}else{for(var i=0,len=this.scale2.values.length;i<len;++i){var y=this.getYCoord(this.scale2.values[i])+offsety;RG.text2(this,{font:font,size:size,x:this.gutterLeft-5+offsetx,y:y,text:this.scale2.labels[i],valign:'center',halign:'right',tag:'scale'});}\nif(prop['chart.scale.zerostart']||prop['chart.ymin']!==0){RG.text2(co,{x:this.gutterLeft-5+offsetx,y:this.getYCoord(prop['chart.ymin']||0),text:RG.numberFormat(this,String(Number(prop['chart.ymin']||0).toFixed(prop['chart.ymin']===0?0:prop['chart.scale.decimals'])),prop['chart.units.pre'],prop['chart.units.post']),font:font,size:size,valign:'center',halign:'right',tag:'scale'});}}}\nif(prop['chart.labels'].length>0){interval=(ca.width-this.gutterLeft-this.gutterRight)/prop['chart.labels'].length;var halign='center',valign='top',angle=prop['chart.text.angle'];if(angle){halign='right';angle*=-1;}\nvar labels=prop['chart.labels'],labelsColor=prop['chart.labels.color'],bold=prop['chart.labels.bold'],offsetx=prop['chart.labels.offsetx'],offsety=prop['chart.labels.offsety']\nfor(var i=0,len=labels.length;i<len;i+=1){RG.text2(this,{color:labelsColor,font:font,size:size,bold:bold,x:this.gutterLeft+(i*interval)+(interval/2)+offsetx,y:ca.height-this.gutterBottom+this.halfTextHeight+offsety,text:labels[i],valign:valign,halign:halign,angle:angle,tag:'labels'});}}\nco.stroke();co.fill();if(prop['chart.labels.above']){this.drawLabelsAbove();}};this.drawLabelsAbove=function()\n{var data=this.data,font=typeof prop['chart.labels.above.font']==='string'?prop['chart.labels.above.font']:prop['chart.text.font'],size=typeof prop['chart.labels.above.size']==='number'?prop['chart.labels.above.size']:prop['chart.text.size'],color=typeof prop['chart.labels.above.color']==='string'?prop['chart.labels.above.color']:prop['chart.text.color'],bold=prop['chart.labels.above.bold']?true:false,italic=prop['chart.labels.above.italic']?true:false,unitsPre=prop['chart.labels.above.units.pre'],unitsPost=prop['chart.labels.above.units.post'],decimals=prop['chart.labels.above.decimals'],thousand=prop['chart.labels.above.thousand'],point=prop['chart.labels.above.point'],formatter=prop['chart.labels.above.formatter'];for(var i=0;i<this.data.length+(prop['chart.total']?1:0);++i){if(prop['chart.total']&&i===this.data.length){var isTotal=true;}\nvar value=Number(isTotal?this.total:this.data[i]);if(typeof prop['chart.labels.above.color']==='object'&&prop['chart.labels.above.color']){if(isTotal&&typeof prop['chart.labels.above.color'][2]==='string'){color=prop['chart.labels.above.color'][2];}else if(this.data[i]<0){color=prop['chart.labels.above.color'][1];}else{color=prop['chart.labels.above.color'][0];}}\nif(typeof prop['chart.labels.above.total.color']==='object'&&prop['chart.labels.above.total.color']){if(isTotal&&typeof prop['chart.labels.above.total.color'][0]==='string'&&typeof prop['chart.labels.above.total.color'][1]==='string'){if(this.total<0){color=prop['chart.labels.above.total.color'][1];}else{color=prop['chart.labels.above.total.color'][0];}}}\nvar coords=this.coords[i];var tmpScaleThousand=prop['chart.scale.thousand'],tmpScalePoint=prop['chart.scale.decimal'];prop['chart.scale.thousand']=prop['chart.labels.above.thousand'];prop['chart.scale.point']=prop['chart.labels.above.point'];if(formatter){var str=(formatter)({object:this,value:value,index:i});}else{var str=RG.numberFormat(this,String(value.toFixed(decimals)),unitsPre,unitsPost);}\nif(isTotal||i===this.data.length){if(typeof prop['chart.labels.above.total.font']==='string')font=prop['chart.labels.above.total.font'];if(typeof prop['chart.labels.above.total.color']==='string')color=prop['chart.labels.above.total.color'];if(typeof prop['chart.labels.above.total.size']==='number')size=prop['chart.labels.above.total.size'];if(!RG.isNull(prop['chart.labels.above.total.bold']))bold=prop['chart.labels.above.total.bold'];if(!RG.isNull(prop['chart.labels.above.total.italic']))italic=prop['chart.labels.above.total.italic'];if(typeof prop['chart.labels.above.total.units.pre']==='string')unitsPre=prop['chart.labels.above.total.units.pre'];if(typeof prop['chart.labels.above.total.units.post']==='string')unitsPost=prop['chart.labels.above.total.units.post'];if(typeof prop['chart.labels.above.total.decimals']==='number')decimals=prop['chart.labels.above.total.decimals'];if(typeof prop['chart.labels.above.total.formatter']==='function')formatter=prop['chart.labels.above.total.formatter'];if(typeof prop['chart.labels.above.total.thousand']==='string')prop['chart.scale.thousand']=prop['chart.labels.above.total.thousand'];if(typeof prop['chart.labels.above.total.point']==='string')prop['chart.scale.point']=prop['chart.labels.above.total.point'];if(formatter){var str=(formatter)({object:this,value:value,index:i});}else{str=RG.numberFormat(this,String(value.toFixed(decimals)),unitsPre,unitsPost);}\nprop['chart.scale.thousand']=tmpScaleThousand;prop['chart.scale.point']=tmpScalePoint;}\nif(typeof prop['chart.labels.above.specific']==='object'&&!RG.isNull(prop['chart.labels.above.specific'])&&(typeof prop['chart.labels.above.specific'][i]==='string'||typeof prop['chart.labels.above.specific'][i]==='number')){str=prop['chart.labels.above.specific'][i];}\nRG.text2(this,{color:color,font:font,size:size,bold:bold,italic:italic,x:coords[0]+(coords[2]/2)+prop['chart.labels.above.offsetx'],y:(isTotal?this.total:this.data[i])>=0?(coords[1]-3-prop['chart.labels.above.offsety']):(coords[1]+coords[3]+3+prop['chart.labels.above.offsety']),text:str,valign:(isTotal?this.total:this.data[i])>=0?'bottom':'top',halign:'center',tag:'labels.above'});}};this.drawbars=this.Drawbars=function()\n{var context=co,canvas=ca,hmargin=prop['chart.hmargin'],runningTotal=0;co.lineWidth=prop['chart.linewidth']+0.001;for(var i=0,len=this.data.length,seq=0;i<len;++i,++seq){co.beginPath();co.strokeStyle=prop['chart.strokestyle'];var x=ma.round(this.gutterLeft+hmargin+(((this.graphwidth/(this.data.length+(prop['chart.total']?1:0)))*i)*prop['chart.multiplier.x']));var h=this.getYCoord(0)-this.getYCoord(ma.abs(this.data[i]));if(i===0){y=this.getYCoord(0)-h;}else{y=this.getYCoord(runningTotal)-h;}\ny=ma.round(y);var w=((ca.width-this.gutterLeft-this.gutterRight)/(this.data.length+(prop['chart.total']?1:0)))-(2*prop['chart.hmargin']);w=w*prop['chart.multiplier.w'];if(this.data[i]<0){y+=h;}\nco.fillStyle=this.data[i]>=0?prop['chart.colors'][0]:prop['chart.colors'][1];if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][seq];}\nif(prop['chart.shadow']){RG.setShadow(this,prop['chart.shadow.color'],prop['chart.shadow.offsetx'],prop['chart.shadow.offsety'],prop['chart.shadow.blur']);}else{RG.noShadow(this);}\nco.rect(x+prop['chart.bar.offsetx'],ma.floor(y)+prop['chart.bar.offsety'],w,ma.floor(h));this.coords.push([x,y,w,h]);runningTotal+=this.data[i];co.stroke();co.fill();}\nthis.total=runningTotal;if(prop['chart.total']){h=this.getYCoord(0)-this.getYCoord(ma.abs(runningTotal));if(prop['chart.xaxispos']=='center'){y=runningTotal>0?this.getYCoord(0)-h:this.getYCoord(0);}else{if(runningTotal>0){y=this.getYCoord(0)-h;}else{y=this.getYCoord(0);}}\nx=x+(prop['chart.hmargin']*2)+w;co.fillStyle=prop['chart.colors'][2];if(prop['chart.colors.sequential']){co.fillStyle=prop['chart.colors'][seq]}\npa2(co,'b r % % % % s % f %',x+prop['chart.bar.offsetx'],y+prop['chart.bar.offsety'],w,h,co.strokeStyle,co.fillStyle);var previousCoords=[x,y,w,ma.abs(h)];this.coords.push(previousCoords);}\nRG.noShadow(this);co.lineWidth=1;co.strokeStyle='#666';co.beginPath();for(var i=1,len=this.coords.length;i<len;i+=1){var prev=this.coords[i-1],curr=this.coords[i],prevData=this.data[i-1];var y=(prevData>0?prev[1]:prev[1]+prev[3]);co.moveTo(prev[0]+prev[2]+prop['chart.bar.offsetx'],y+prop['chart.bar.offsety']);co.lineTo(curr[0]+prop['chart.bar.offsetx'],(prevData>0?prev[1]:prev[1]+prev[3])+prop['chart.bar.offsety']);}\nco.stroke();};this.getShape=this.getBar=function(e)\n{for(var i=0,len=this.coords.length;i<len;i++){var mouseXY=RG.getMouseXY(e),mouseX=mouseXY[0],mouseY=mouseXY[1];var left=this.coords[i][0],top=this.coords[i][1],width=this.coords[i][2],height=this.coords[i][3];if(mouseX>=left&&mouseX<=(left+width)&&mouseY>=top&&mouseY<=top+height){var tooltip=RG.parseTooltipText(prop['chart.tooltips'],i);return{0:this,object:this,1:left,x:left,2:top,y:top,3:width,width:width,4:height,height:height,5:i,index:i,tooltip:tooltip};}}\nreturn null;};this.getMax=function(data)\n{var runningTotal=0,max=0;for(var i=0,len=data.length;i<len;i+=1){runningTotal+=data[i];max=ma.max(ma.abs(runningTotal),max);}\nreturn ma.abs(max);};this.allowTooltips=this.AllowTooltips=function()\n{RG.PreLoadTooltipImages(this);RG.InstallWindowMousedownTooltipListener(this);RG.InstallCanvasMousemoveTooltipListener(this);RG.InstallCanvasMouseupTooltipListener(this);};this.highlight=this.Highlight=function(shape)\n{if(typeof prop['chart.highlight.style']==='function'){(prop['chart.highlight.style'])(shape);}else{RG.Highlight.Rect(this,shape);}};this.getObjectByXY=function(e)\n{var mouseXY=RG.getMouseXY(e);if(mouseXY[0]>this.gutterLeft&&mouseXY[0]<(ca.width-this.gutterRight)&&mouseXY[1]>this.gutterTop&&mouseXY[1]<(ca.height-this.gutterBottom)){return this;}};this.getYCoord=function(value)\n{if(prop['chart.xaxispos']=='center'){if(value<(-1*this.max)){return null;}\nvar coord=(value/this.max)*(this.grapharea/2);return this.gutterTop+(this.grapharea/2)-coord;}else{var coord=((value-this.scale2.min)/(this.max-this.scale2.min))*this.grapharea;coord=coord+this.gutterBottom;return ca.height-coord;}};this.parseColors=function()\n{if(this.original_colors.length===0){this.original_colors['chart.colors']=RG.array_clone(prop['chart.colors']);this.original_colors['chart.key.colors']=RG.array_clone(prop['chart.key.colors']);this.original_colors['chart.crosshairs.color']=RG.array_clone(prop['chart.crosshairs.color']);this.original_colors['chart.highlight.stroke']=RG.array_clone(prop['chart.highlight.stroke']);this.original_colors['chart.highlight.fill']=RG.array_clone(prop['chart.highlight.fill']);this.original_colors['chart.background.barcolor1']=RG.array_clone(prop['chart.background.barcolor1']);this.original_colors['chart.background.barcolor2']=RG.array_clone(prop['chart.background.barcolor2']);this.original_colors['chart.background.grid.color']=RG.array_clone(prop['chart.background.grid.color']);this.original_colors['chart.strokestyle']=RG.array_clone(prop['chart.strokestyle']);this.original_colors['chart.axis.color']=RG.array_clone(prop['chart.axis.color']);}\nvar colors=prop['chart.colors'];if(colors){for(var i=0,len=colors.length;i<len;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}\nvar colors=prop['chart.key.colors'];if(colors){for(var i=0,len=colors.length;i<len;++i){colors[i]=this.parseSingleColorForGradient(colors[i]);}}\nprop['chart.crosshairs.color']=this.parseSingleColorForGradient(prop['chart.crosshairs.color']);prop['chart.highlight.stroke']=this.parseSingleColorForGradient(prop['chart.highlight.stroke']);prop['chart.highlight.fill']=this.parseSingleColorForGradient(prop['chart.highlight.fill']);prop['chart.background.barcolor1']=this.parseSingleColorForGradient(prop['chart.background.barcolor1']);prop['chart.background.barcolor2']=this.parseSingleColorForGradient(prop['chart.background.barcolor2']);prop['chart.background.grid.color']=this.parseSingleColorForGradient(prop['chart.background.grid.color']);prop['chart.strokestyle']=this.parseSingleColorForGradient(prop['chart.strokestyle']);prop['chart.axis.color']=this.parseSingleColorForGradient(prop['chart.axis.color']);};this.reset=function()\n{};this.parseSingleColorForGradient=function(color)\n{if(!color||typeof color!='string'){return color;}\nif(typeof color==='string'&&color.match(/^gradient\\((.*)\\)$/i)){if(color.match(/^gradient\\(({.*})\\)$/i)){return RGraph.parseJSONGradient({object:this,def:RegExp.$1});}\nvar parts=RegExp.$1.split(':');var grad=co.createLinearGradient(0,ca.height-prop['chart.gutter.bottom'],0,prop['chart.gutter.top']);var diff=1/(parts.length-1);grad.addColorStop(0,RG.trim(parts[0]));for(var j=1,len=parts.length;j<len;++j){grad.addColorStop(j*diff,RG.trim(parts[j]));}}\nreturn grad?grad:color;};this.on=function(type,func)\n{if(type.substr(0,2)!=='on'){type='on'+type;}\nif(typeof this[type]!=='function'){this[type]=func;}else{RG.addCustomEventListener(this,type,func);}\nreturn this;};this.firstDrawFunc=function()\n{};this.grow=function()\n{var opt=arguments[0]||{};var callback=arguments[1]||function(){};var frames=opt.frames||30;var numFrame=0;var obj=this;var data=RG.array_clone(obj.data);for(var i=0,len=obj.data.length;i<len;++i){obj.data[i]/=frames;}\nif(obj.Get('chart.ymax')==null){var max=obj.getMax(data);var scale2=RG.getScale2(obj,{'max':max});obj.Set('chart.ymax',scale2.max);}\nfunction iterator()\n{for(var i=0;i<obj.data.length;++i){obj.data[i]=data[i]*RG.Effects.getEasingMultiplier(frames,numFrame);}\nRGraph.clear(obj.canvas);RGraph.redrawCanvas(obj.canvas);if(++numFrame<frames){RGraph.Effects.updateCanvas(iterator);}else{callback(obj);}}\niterator();return this;};RG.att(ca);RG.Register(this);if(parseConfObjectForOptions){RG.parseObjectStyleConfig(this,conf.options);}\nreturn this;};"
  },
  {
    "path": "docs/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.4.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  text-shadow: 0 1px 0 #fff;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n  background-color: #2e6da4;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));\n  background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */"
  },
  {
    "path": "docs/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.4.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: none;\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n  -moz-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\nmark {\n  background: #ff0;\n  color: #000;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsup {\n  top: -0.5em;\n}\nsub {\n  bottom: -0.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -webkit-box-sizing: content-box;\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n  border: 0;\n  padding: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: \"Glyphicons Halflings\";\n  src: url(\"../fonts/glyphicons-halflings-regular.eot\");\n  src: url(\"../fonts/glyphicons-halflings-regular.eot?#iefix\") format(\"embedded-opentype\"), url(\"../fonts/glyphicons-halflings-regular.woff2\") format(\"woff2\"), url(\"../fonts/glyphicons-halflings-regular.woff\") format(\"woff\"), url(\"../fonts/glyphicons-halflings-regular.ttf\") format(\"truetype\"), url(\"../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular\") format(\"svg\");\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: \"Glyphicons Halflings\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all 0.2s ease-in-out;\n  -o-transition: all 0.2s ease-in-out;\n  transition: all 0.2s ease-in-out;\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: 400;\n  line-height: 1;\n  color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n  margin-left: -5px;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: 700;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    clear: left;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: \"\\2014 \\00A0\";\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: \"\";\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: \"\\00A0 \\2014\";\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.row-no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n.row-no-gutters [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n.col-xs-1,\n.col-sm-1,\n.col-md-1,\n.col-lg-1,\n.col-xs-2,\n.col-sm-2,\n.col-md-2,\n.col-lg-2,\n.col-xs-3,\n.col-sm-3,\n.col-md-3,\n.col-lg-3,\n.col-xs-4,\n.col-sm-4,\n.col-md-4,\n.col-lg-4,\n.col-xs-5,\n.col-sm-5,\n.col-md-5,\n.col-lg-5,\n.col-xs-6,\n.col-sm-6,\n.col-md-6,\n.col-lg-6,\n.col-xs-7,\n.col-sm-7,\n.col-md-7,\n.col-lg-7,\n.col-xs-8,\n.col-sm-8,\n.col-md-8,\n.col-lg-8,\n.col-xs-9,\n.col-sm-9,\n.col-md-9,\n.col-lg-9,\n.col-xs-10,\n.col-sm-10,\n.col-md-10,\n.col-lg-10,\n.col-xs-11,\n.col-sm-11,\n.col-md-11,\n.col-lg-11,\n.col-xs-12,\n.col-sm-12,\n.col-md-12,\n.col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1,\n.col-xs-2,\n.col-xs-3,\n.col-xs-4,\n.col-xs-5,\n.col-xs-6,\n.col-xs-7,\n.col-xs-8,\n.col-xs-9,\n.col-xs-10,\n.col-xs-11,\n.col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0%;\n}\n@media (min-width: 768px) {\n  .col-sm-1,\n  .col-sm-2,\n  .col-sm-3,\n  .col-sm-4,\n  .col-sm-5,\n  .col-sm-6,\n  .col-sm-7,\n  .col-sm-8,\n  .col-sm-9,\n  .col-sm-10,\n  .col-sm-11,\n  .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1,\n  .col-md-2,\n  .col-md-3,\n  .col-md-4,\n  .col-md-5,\n  .col-md-6,\n  .col-md-7,\n  .col-md-8,\n  .col-md-9,\n  .col-md-10,\n  .col-md-11,\n  .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0%;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1,\n  .col-lg-2,\n  .col-lg-3,\n  .col-lg-4,\n  .col-lg-5,\n  .col-lg-6,\n  .col-lg-7,\n  .col-lg-8,\n  .col-lg-9,\n  .col-lg-10,\n  .col-lg-11,\n  .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0%;\n  }\n}\ntable {\n  background-color: transparent;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: 0.01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: 700;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eeeeee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: 400;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  margin-bottom: 0;\n  font-weight: normal;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n  touch-action: manipulation;\n  cursor: pointer;\n  background-image: none;\n  border: 1px solid transparent;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  border-radius: 4px;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  opacity: 0.65;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  background-image: none;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  background-image: none;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  background-image: none;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  background-image: none;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  background-image: none;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  background-image: none;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: 400;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-property: height, visibility;\n  -o-transition-property: height, visibility;\n  transition-property: height, visibility;\n  -webkit-transition-duration: 0.35s;\n  -o-transition-duration: 0.35s;\n  transition-duration: 0.35s;\n  -webkit-transition-timing-function: ease;\n  -o-transition-timing-function: ease;\n  transition-timing-function: ease;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: 400;\n  line-height: 1.42857143;\n  color: #333333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n  color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n  -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-right: 15px;\n  margin-top: 8px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-right: -15px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eeeeee;\n  border-color: #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: 0.2em 0.6em 0.3em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border 0.2s ease-in-out;\n  -o-transition: border 0.2s ease-in-out;\n  transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n  background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n  -o-animation: progress-bar-stripes 2s linear infinite;\n  animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777777;\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: 0.2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\nbutton.close {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transform: translate(0, -25%);\n  -ms-transform: translate(0, -25%);\n  -o-transform: translate(0, -25%);\n  transform: translate(0, -25%);\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  -o-transition: -o-transform 0.3s ease-out;\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n  outline: 0;\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 12px;\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.42857143;\n  line-break: auto;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  font-size: 14px;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999999;\n  border-top-color: rgba(0, 0, 0, 0.25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999999;\n  border-right-color: rgba(0, 0, 0, 0.25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999999;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999999;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: 0.6s ease-in-out left;\n  -o-transition: 0.6s ease-in-out left;\n  transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform 0.6s ease-in-out;\n    -o-transition: -o-transform 0.6s ease-in-out;\n    transition: -webkit-transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out;\n    transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out;\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n    perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    left: 0;\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    left: 0;\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: 0.5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5)));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  filter: alpha(opacity=90);\n  opacity: 0.9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: \"\\2039\";\n}\n.carousel-control .icon-next:before {\n  content: \"\\203a\";\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "docs/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.4.0 (https://getbootstrap.com/)\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // https://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.4.0'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    selector    = selector === '#' ? [] : selector\n    var $parent = $(document).find(selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.4.0'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.4.0'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      if (typeof $next === 'object' && $next.length) {\n        $next[0].offsetWidth // force reflow\n      }\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    if (href) {\n      href = href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n    }\n\n    var target  = $this.attr('data-target') || href\n    var $target = $(document).find(target)\n\n    if (!$target.hasClass('carousel')) return\n\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.4.0'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(document).find(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(document).find(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.4.0'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(document).find(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#modals\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options = options\n    this.$body = $(document.body)\n    this.$element = $(element)\n    this.$dialog = this.$element.find('.modal-dialog')\n    this.$backdrop = null\n    this.isShown = null\n    this.originalBodyPad = null\n    this.scrollbarWidth = 0\n    this.ignoreBackdropClick = false\n    this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION = '3.4.0'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n          this.$element[0] !== e.target &&\n          !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    var scrollbarWidth = this.scrollbarWidth\n    if (this.bodyIsOverflowing) {\n      this.$body.css('padding-right', bodyPad + scrollbarWidth)\n      $(this.fixedContent).each(function (index, element) {\n        var actualPadding = element.style.paddingRight\n        var calculatedPadding = $(element).css('padding-right')\n        $(element)\n          .data('padding-right', actualPadding)\n          .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')\n      })\n    }\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n    $(this.fixedContent).each(function (index, element) {\n      var padding = $(element).data('padding-right')\n      $(element).removeData('padding-right')\n      element.style.paddingRight = padding ? padding : ''\n    })\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this = $(this)\n      var data = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this = $(this)\n    var href = $this.attr('href')\n    var target = $this.attr('data-target') ||\n      (href && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n\n    var $target = $(document).find(target)\n    var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.4.0'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.4.0'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n        o.content.call($e[0]) :\n        o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.4.0'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.4.0'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(document).find(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n        .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n        .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n          .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.4.0\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n    this.$target = target\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.4.0'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "docs/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "docs/video.html",
    "content": "<!DOCTYPE html> \n<html> \n\t<head>\n\n<!-- Latest compiled and minified CSS -->\n<link rel=\"stylesheet\" href=\"css/bootstrap.min.css\">\n\n<!-- Latest compiled and minified JavaScript -->\n<script src=\"js/jquery-3.3.1.min.js\"></script>\n<script src=\"js/bootstrap.min.js\" ></script>\n<script>\nfunction getJsonFromUrl(url) {\n  if(!url) url = location.href;\n  var query = url.substr(1);\n  var question = location.href.indexOf(\"?\");\n  var query = location.href.substr(question+1);\n  var hash = query.indexOf(\"#\");\n  if(hash>-1) query = query.substr(0,hash);\n  var result = {};\n  query.split(\"&\").forEach(function(part) {\n    if(!part) return;\n    part = part.split(\"+\").join(\" \"); // replace every + with space, regexp-free version\n    var eq = part.indexOf(\"=\");\n    var key = eq>-1 ? part.substr(0,eq) : part;\n    var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : \"\";\n    var from = key.indexOf(\"[\");\n    if(from==-1) result[decodeURIComponent(key)] = val;\n    else {\n      var to = key.indexOf(\"]\",from);\n      var index = decodeURIComponent(key.substring(from+1,to));\n      key = decodeURIComponent(key.substring(0,from));\n      if(!result[key]) result[key] = [];\n      if(!index) result[key].push(val);\n      else result[key][index] = val;\n    }\n  });\n  return result;\n}\n\nvar vars = getJsonFromUrl();\nvar tag = \"final\";\nvar algo = \"apex\";\nvar game = \"Alien\";\nvar run_id = 1;\nvar video_source = null; \n\nvar update_video_source = function() {\nvideo_source = `https://dgqeqexrlnkvd.cloudfront.net/zoo/movies/${algo}-${game}NoFrameskip-v4-${run_id}-${tag}.mp4`\nvar vid = document.getElementById(\"atarivideo\");\nvid.src=video_source;\n}\n\nvar form_update = function() {\n\ngame = document.getElementById('game').value;\nalgo = document.getElementById('algo').value;\nrun = document.getElementById('run').value;\ntag = document.getElementById('tag').value;\n\nupdate_video_source();\n}\n\nwindow.onload = function() {\nif(vars.game) { \n\tgame=vars.game;\n\tdocument.getElementById('game').value=game;\n}\n\nif(vars.algo) {\n\talgo=vars.algo;\n\tdocument.getElementById('algo').value=algo;\n}\nif(vars.run_id) {\n\trun_id=vars.run_id;\n\tdocument.getElementById('run').value=run_id;\n}\n\nif(vars.tag) {\n\ttag=vars.tag;\n\tdocument.getElementById('tag').value=tag;\n}\n\nupdate_video_source();\n}\n\n</script>\n<title>Atari Zoo Neural Activity Visualizer</title>\n</head>\n\t<header>\n  <div class=\"navbar navbar-light shadow-sm\" style=\"background-color: #7709cccf;\">\n    <div class=\"container d-flex justify-content-between\">\n      <a href=\"#\" class=\"navbar-brand d-flex align-items-center\" style='color: #f5f5f5;'>\n        <strong>Atari Zoo Video Viewer</strong>\n      </a>\n      </button>\n    </div>\n  </div>\n\t</header>\n\t<body>\n\t\t<div class='container'>\n\t\t\t<div class='row' style=\"margin: auto; max-width: 650px\">\n\t\t\t\t<video class=\"video-fluid z-depth-1\" width=\"400\" id=\"atarivideo\" controls autoplay>\n\t\t\t\t\t      Your browser does not support HTML5 video.\n\t\t\t\t</video>\n\t\t\t</div>\n\t\t</div>\n\t\t<br/>\n\t\t<div class='container'>\n\t\t\t<div class='row' style=\"margin: auto; max-width: 800px\">\n\t\t\t\t<div class=\"col-xs-2\">\n\t\t\t\t\t<select class='form-control input-lg' id=\"algo\" onchange=\"form_update();\">\n\t\t\t\t\t\t  <option value=\"apex\">Ape-X</option>\n\t\t\t\t\t\t  <option value=\"a2c\">A2C</option>\n\t\t\t\t\t\t    <option value=\"dqn\">DQN</option>\n\t\t\t\t\t\t      <option value=\"es\">ES</option>\n\t\t\t\t\t\t      <option value=\"ga\">GA</option>\n\t\t\t\t\t\t        <option value=\"rainbow\">Rainbow</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class='col-xs-2'>\n\t\t\t\t\t<select class='form-control input-lg' id=\"run\" onchange=\"form_update();\">\n\t\t\t\t\t\t  <option value=\"1\">Run 1</option>\n\t\t\t\t\t\t  <option value=\"2\">Run 2</option>\n\t\t\t\t\t\t    <option value=\"3\">Run 3</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class='col-xs-2'> \n\t\t\t\t\t<select class='form-control input-lg' id=\"game\" onchange=\"form_update();\">\n\t\t\t\t\t\t<option value=\"Alien\">Alien</option>\n\t\t\t\t\t\t<option value=\"Amidar\">Amidar</option>\n\t\t\t\t\t\t<option value=\"Assault\">Assault</option>\n\t\t\t\t\t\t<option value=\"Asterix\">Asterix</option>\n\t\t\t\t\t\t<option value=\"Asteroids\">Asteroids</option>\n\t\t\t\t\t\t<option value=\"Atlantis\">Atlantis</option>\n\t\t\t\t\t\t<option value=\"BankHeist\">BankHeist</option>\n\t\t\t\t\t\t<option value=\"BattleZone\">BattleZone</option>\n\t\t\t\t\t\t<option value=\"BeamRider\">BeamRider</option>\n\t\t\t\t\t\t<option value=\"Berzerk\">Berzerk</option>\n\t\t\t\t\t\t<option value=\"Bowling\">Bowling</option>\n\t\t\t\t\t\t<option value=\"Boxing\">Boxing</option>\n\t\t\t\t\t\t<option value=\"Breakout\">Breakout</option>\n\t\t\t\t\t\t<option value=\"Centipede\">Centipede</option>\n\t\t\t\t\t\t<option value=\"ChopperCommand\">ChopperCommand</option>\n\t\t\t\t\t\t<option value=\"CrazyClimber\">CrazyClimber</option>\n\t\t\t\t\t\t<option value=\"DemonAttack\">DemonAttack</option>\n\t\t\t\t\t\t<option value=\"DoubleDunk\">DoubleDunk</option>\n\t\t\t\t\t\t<option value=\"Enduro\">Enduro</option>\n\t\t\t\t\t\t<option value=\"FishingDerby\">FishingDerby</option>\n\t\t\t\t\t\t<option value=\"Freeway\">Freeway</option>\n\t\t\t\t\t\t<option value=\"Frostbite\">Frostbite</option>\n\t\t\t\t\t\t<option value=\"Gopher\">Gopher</option>\n\t\t\t\t\t\t<option value=\"Gravitar\">Gravitar</option>\n\t\t\t\t\t\t<option value=\"Hero\">Hero</option>\n\t\t\t\t\t\t<option value=\"IceHockey\">IceHockey</option>\n\t\t\t\t\t\t<option value=\"Jamesbond\">Jamesbond</option>\n\t\t\t\t\t\t<option value=\"Kangaroo\">Kangaroo</option>\n\t\t\t\t\t\t<option value=\"Krull\">Krull</option>\n\t\t\t\t\t\t<option value=\"KungFuMaster\">KungFuMaster</option>\n\t\t\t\t\t\t<option value=\"MontezumaRevenge\">MontezumaRevenge</option>\n\t\t\t\t\t\t<option value=\"MsPacman\">MsPacman</option>\n\t\t\t\t\t\t<option value=\"NameThisGame\">NameThisGame</option>\n\t\t\t\t\t\t<option value=\"Phoenix\">Phoenix</option>\n\t\t\t\t\t\t<option value=\"Pitfall\">Pitfall</option>\n\t\t\t\t\t\t<option value=\"Pong\">Pong</option>\n\t\t\t\t\t\t<option value=\"PrivateEye\">PrivateEye</option>\n\t\t\t\t\t\t<option value=\"Qbert\">Qbert</option>\n\t\t\t\t\t\t<option value=\"Riverraid\">Riverraid</option>\n\t\t\t\t\t\t<option value=\"RoadRunner\">RoadRunner</option>\n\t\t\t\t\t\t<option value=\"Robotank\">Robotank</option>\n\t\t\t\t\t\t<option value=\"Seaquest\">Seaquest</option>\n\t\t\t\t\t\t<option value=\"Skiing\">Skiing</option>\n\t\t\t\t\t\t<option value=\"Solaris\">Solaris</option>\n\t\t\t\t\t\t<option value=\"SpaceInvaders\">SpaceInvaders</option>\n\t\t\t\t\t\t<option value=\"StarGunner\">StarGunner</option>\n\t\t\t\t\t\t<option value=\"Tennis\">Tennis</option>\n\t\t\t\t\t\t<option value=\"TimePilot\">TimePilot</option>\n\t\t\t\t\t\t<option value=\"Tutankham\">Tutankham</option>\n\t\t\t\t\t\t<option value=\"UpNDown\">UpNDown</option>\n\t\t\t\t\t\t<option value=\"Venture\">Venture</option>\n\t\t\t\t\t\t<option value=\"VideoPinball\">VideoPinball</option>\n\t\t\t\t\t\t<option value=\"WizardOfWor\">WizardOfWor</option>\n\t\t\t\t\t\t<option value=\"YarsRevenge\">YarsRevenge</option>\n\t\t\t\t\t\t<option value=\"Zaxxon\">Zaxxon</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t\t\n\t\t\t\t<div class='col-xs-2'> \n\t\t\t\t\t<select class='form-control input-lg' id=\"tag\" onchange=\"form_update();\">\n\t\t\t\t\t\t<option value=\"final\">Final</option>\n\t\t\t\t\t\t<option value=\"400M\">400M Frames</option>\n\t\t\t\t\t\t<option value=\"1B\">1B Frames</option>\n\t\t\t\t\t\t<option value=\"1HR\">1 hour</option>\n\t\t\t\t\t\t<option value=\"2HR\">2 hours</option>\n\t\t\t\t\t\t<option value=\"4HR\">4 hours</option>\n\t\t\t\t\t\t<option value=\"6HR\">6 hours</option>\n\t\t\t\t\t\t<option value=\"10HR\">10 hours</option>\n\t\t\t\t\t\t<option value=\"initial\">Initial</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t</center>\n\t\t</div>\n\n\t\t<script>\n\t\t</script>\n\t</body> \n</html>\n"
  },
  {
    "path": "docs/video2.html",
    "content": "<!DOCTYPE html >\n<html>\n<head>\n<!-- Latest compiled and minified CSS -->\n<link rel=\"stylesheet\" href=\"css/bootstrap.min.css\">\n\n<!-- Latest compiled and minified JavaScript -->\n<script src=\"js/jquery-3.3.1.min.js\"></script>\n<script src=\"js/bootstrap.min.js\" ></script>\n    <style>\n        canvas\n        {\n            border: 1px solid gray;\n        }\n    </style>\n\n<script>\n/**\nCode for loading vars from url\n*/\n\nfunction getJsonFromUrl(url) {\n  if(!url) url = location.href;\n  var query = url.substr(1);\n  var question = location.href.indexOf(\"?\");\n  if (question==-1) { return {} }\n  var query = location.href.substr(question+1);\n  var hash = query.indexOf(\"#\");\n  if(hash>-1) query = query.substr(0,hash);\n  var result = {};\n  query.split(\"&\").forEach(function(part) {\n    if(!part) return;\n    part = part.split(\"+\").join(\" \"); // replace every + with space, regexp-free version\n    var eq = part.indexOf(\"=\");\n    var key = eq>-1 ? part.substr(0,eq) : part;\n    var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : \"\";\n    var from = key.indexOf(\"[\");\n    if(from==-1) result[decodeURIComponent(key)] = val;\n    else {\n      var to = key.indexOf(\"]\",from);\n      var index = decodeURIComponent(key.substring(from+1,to));\n      key = decodeURIComponent(key.substring(0,from));\n      if(!result[key]) result[key] = [];\n      if(!index) result[key].push(val);\n      else result[key][index] = val;\n    }\n  });\n  return result;\n}\n\nfunction getUrlFromJson(data) {\n\n\tvar cutoff = location.href.indexOf(\"?\");\n\tvar pre = location.href;\n\n\tif (cutoff!=-1) {\n\t\tpre = location.href.substr(0,cutoff);\n\t}\n\n\turl = Object.keys(data).map(function(k) {\n\t    return encodeURIComponent(k) + '=' + encodeURIComponent(data[k])\n\t}).join('&');\n\n\treturn pre+\"?\"+url;\n}\n\nvar vars = getJsonFromUrl();\nvar url = getUrlFromJson(vars);\nvar tag = \"final\";\nvar algo = \"apex\";\nvar game = \"Alien\";\nvar run = 1;\nvar video_source = null; \nvar state = {'h':216,'w':166,'x':47,'y':576};\nvar state2 = {'h':215,'w':197,'x':251,'y':567};\nvar vid = null;\n\nvar update_video_source = function() {\nvideo_source = `https://dgqeqexrlnkvd.cloudfront.net/zoo/activation_movies/${algo}-${game}NoFrameskip-v4-${run}-${tag}.mp4`;\n//video_source = `../${algo}-${game}NoFrameskip-v4-${run}-${tag}.mp4`\nvid = document.getElementById(\"atarivideo\");\nvid.src=video_source;\nvid.playbackRate = 0.5;\n\n}\n\nvar form_update = function() {\n\ngame = document.getElementById('game').value;\nalgo = document.getElementById('algo').value;\nrun = document.getElementById('run').value;\ntag = document.getElementById('tag').value;\n\nupdate_video_source();\n}\n\n\n</script>\n\n    <script>\n        /**\n        * The window.onload function contains all of the code necessary\n        */\n        window.onload = function (e)\n        {\n            /**\n            * Some common variables\n            */\n            var canvas     = document.getElementById(\"cvs\");\n            var context    = canvas.getContext('2d');\n\n            var canvas2    = document.getElementById(\"cvs2\");\n            var context2   = canvas2.getContext('2d');\n\n            var canvas3    = document.getElementById(\"cvs3\");\n            var context3   = canvas3.getContext('2d');\n\n            var video      = document.getElementById(\"atarivideo\");\n\n\t    vid = document.getElementById(\"atarivideo\");\n\n            var translated = true;\n            var mousedown  = false;\n\t    var selection_toggle = false;\n            \n            \n            /**\n            * Translate for antialiasing purpose\n            */\n            if (!translated) {\n                context.translate(0.5,0.5);\n                translated = true;\n            }\n\n\n\n\n\n            /**\n            * The main draw function that renders each frame\n            */\n            function Draw()\n            {\n                /**\n                * Start by clearing both canvas tags\n                */\n                context.clearRect(0,0,canvas.width,canvas.height);\n                context2.clearRect(0,0,canvas2.width,canvas2.height);\n                context3.clearRect(0,0,canvas3.width,canvas3.height);\n\n                /**\n                * Draw the \"Loading...\" placeholder. This is overwritten once the video has loaded\n                */\n                RGraph.Text2(context, {'font':'Arial',\n                                       'size':24,\n                                       'x':15,\n                                       'y':36,\n                                       'text':'Loading...'});\n\n\n\n\n\n                /**\n                * Draw the video on the first canvas\n                */\n                context.drawImage(video,0,0);\n\n\n\n                /**\n                * Draw the selection on to the second canvas\n                */\n                if (state && state.x && state.y && state.w && state.h) {\n                    context2.drawImage(canvas,state.x,state.y,state.w,state.h,\n                                              0,0,canvas2.width, canvas2.height);\n                }\n\n\n                /**\n                * Draw the selection on to the third canvas\n                */\n                if (state2 && state2.x && state2.y && state2.w && state2.h) {\n                    context3.drawImage(canvas,state2.x,state2.y,state2.w,state2.h,\n                                              0,0,canvas3.width, canvas3.height);\n                }\n\n\n                /**\n                * Draw the selection box if necessary\n                */\n                if (state) {\n                    if (context.setLineDash) context.setLineDash([3,3]);\n                    context.lineWidth = 2;\n                    context.strokeStyle = 'red'\n                    context.strokeRect(state.x, state.y, state.w, state.h);\n                    if (context.setLineDash) context.setLineDash([1]);\n                }\n\n                /**\n                * Draw the selection box if necessary\n                */\n                if (state2) {\n                    if (context.setLineDash) context.setLineDash([3,3]);\n                    context.lineWidth = 2;\n                    context.strokeStyle = 'green'\n                    context.strokeRect(state2.x, state2.y, state2.w, state2.h);\n                    if (context.setLineDash) context.setLineDash([1]);\n                }\n\n                setTimeout(Draw, 1000 / 60);\n            }\n\n\n\n\n\n\n\n\n            /**\n            * The mousedown event initiates the selection process\n            */\n            canvas.onmousedown = function (e)\n            {\n                var mouseXY = RGraph.getMouseXY(e);\n               \n\t        if (!selection_toggle) {\t\n                state = {x: mouseXY[0], y:mouseXY[1]};\n\t\t}\n\t\telse {\n\t\tstate2 = {x: mouseXY[0], y:mouseXY[1]};\n\t\t}\n                mousedown = true;\n            }\n            \n            \n            \n            /**\n            * The mouseup event finishes the selection for zoom\n            */\n            //window.onmouseup =\n            canvas.onmouseup = function (e)\n            {\n\t\tvar _toggle = Boolean(selection_toggle);\n\n                if ((!_toggle) && state) {\n\t\t    selection_toggle = true;\n                }\n\n\n\t\tif (_toggle && state2) {\n\t\t    selection_toggle = false;\n\t\t}\n\n                mousedown = false;\n            }\n\n\n\n            \n            \n            /**\n            * The mousemove event updates the selection for zoom\n            */\n            canvas.onmousemove = function (e)\n            {\n                if (!selection_toggle && state && mousedown) {\n                    \n                    var mouseXY = RGraph.getMouseXY(e);\n\n                    state.w = mouseXY[0] - state.x;\n                    state.h = mouseXY[1] - state.y;\n\n                }\n\n                if (selection_toggle && state2 && mousedown) {\n                    \n                    var mouseXY = RGraph.getMouseXY(e);\n\n                    state2.w = mouseXY[0] - state2.x;\n                    state2.h = mouseXY[1] - state2.y;\n\n                }\n\n            }\n\n\n\n    \t    document.getElementById(\"urlCopyButton\").onclick = function(e) {\n\n\t\tif(state)\n\t\tvars.state = JSON.stringify(state);\n\t\tif(state2)\n\t\tvars.state2 = JSON.stringify(state2);\n\n\n\t\tvars.game = game;\n\t\tvars.algo = algo;\n\t\tvars.run = run;\n\t\tvars.tag = tag;\n\t\t\n\t\turl = getUrlFromJson(vars);\n\t\tdocument.getElementById(\"urlText\").value = url;\n\t    }\n\n            document.getElementById(\"resetButton\").onclick = function (e)\n            {\n\t\tvid.currentTime = 0.0;\n            }\n\n            /**\n            * This handles when the play button is pressed\n            */\n            document.getElementById(\"playButton\").onclick = function (e)\n            {\n\t\tvid.playbackRate = 0.5;\n                video.play();\n            }\n\n            document.getElementById(\"slowButton\").onclick = function (e)\n            {\n\t\tvid.playbackRate = 0.1;\n                video.play();\n            }\n\n\n            document.getElementById(\"framePlus\").onclick = function (e)\n            {\n\t\tvid.currentTime += 1.0/30.0;\n\t\tvid.pause();\n            }\n\n\n            document.getElementById(\"frameMinus\").onclick = function (e)\n            {\n\t\tvid.currentTime -= 1.0/30.0;\n\t\tvid.pause();\n            }\n\n            document.getElementById(\"conv1\").onclick = function (e)\n            {\n\t\t    state = {'h':216,'w':166,'x':47,'y':576};\n\t\t    state2 = {'h':168,'w':265,'x':217,'y':126};\n            }\n\n            document.getElementById(\"conv2\").onclick = function (e)\n            {\n\t\t    state = {'h':216,'w':166,'x':47,'y':576};\n\t\t    state2 = {'h':218,'w':194,'x':254,'y':319};\n            }\n\n            document.getElementById(\"conv3\").onclick = function (e)\n            {\n\t\t    state = {'h':216,'w':166,'x':47,'y':576};\n\t\t    state2 = {'h':215,'w':197,'x':251,'y':567};\n            }\n\n            document.getElementById(\"fc\").onclick = function (e)\n            {\n\t\t    state = {'h':216,'w':166,'x':47,'y':576};\n\t\t    state2 = {'h':108,'w':156,'x':272,'y':804};\n            }\n\n\n            document.getElementById(\"toggleActivation\").onclick = function (e)\n            {\n\t\tif (cvs.style.display==\"inline\")\n\t\t\tcvs.style.display=\"none\";\n\t\telse\n\t\t\tcvs.style.display=\"inline\";\n            }\n\n            document.getElementById(\"toggleDrag\").onclick = function (e)\n            {\n\t\tif (vid.style.display==\"inline\")\n\t\t\tvid.style.display=\"none\";\n\t\telse\n\t\t\tvid.style.display=\"inline\";\n            }\n\n            /**\n            * This handles when the stop button is pressed\n            */\n            document.getElementById(\"stopButton\").onclick = function (e)\n            {\n                video.pause();\n            }\n\n\n            /**\n            * Call the Draw function at a frame rate of 60fps\n            */\n            setTimeout(Draw, 1000 / 60);\n\n\nif(vars.game) { \n\tgame=vars.game;\n\tdocument.getElementById('game').value=game;\n}\n\nif(vars.algo) {\n\talgo=vars.algo;\n\tdocument.getElementById('algo').value=algo;\n}\nif(vars.run_id) {\n\trun_id=vars.run_id;\n\tdocument.getElementById('run').value=run_id;\n}\n\nif(vars.tag) {\n\ttag=vars.tag;\n\tdocument.getElementById('tag').value=tag;\n}\n\nif(vars.state) {\nstate = JSON.parse(vars.state);\n}\n\nif(vars.state2) {\nstate2 = JSON.parse(vars.state2);\n}\n\nupdate_video_source();\n\n}\n\n\n    </script>\n\n<title>Atari Zoo Neural Activity Visualizer</title>\n\n\n\n\n\n<!-- Keep these here - causes page to shift layout if placed further down -->\n    <script src=\"./RGraph/libraries/RGraph.common.core.js\"></script><!-- DO NOT DEFER -->\n\n</head>\n<header>\n      <div class=\"navbar navbar-light shadow-sm\" style=\"background-color: #6705b3b5;\">\n        <div class=\"container d-flex justify-content-between\">\n          <a href=\"#\" class=\"navbar-brand d-flex align-items-center\" style='color: #f5f5f5;'>\n            <strong>Atari Zoo Neural Activity Visualizer</strong>\n          </a>\n          </button>\n        </div>\n      </div>\n</header>\n<body>\n\n    \n  \n    <div class='container'>\n        <div class='row'>\n        \t<h4>Activations to view</h4>\n            <button type=\"button\" class=\"btn btn-primary btn-small\" id=\"conv1\">Conv1</button>\n            <button type=\"button\" class=\"btn btn-success btn-small\" id=\"conv2\">Conv2</button>\n            <button type=\"button\" class=\"btn btn-danger btn-small\" id=\"conv3\">Conv3</button>\n            <button type=\"button\" class=\"btn btn-warning btn-small\" id=\"fc\">FC</button>\n        </div>\n    </div>\n    <br/>\n    \n    <div class='container'>\n        <div class='row'>\n            <h4>Select model to visualize</h4>\n        \t\t<select class='form-control-sm input-lg' id=\"algo\" onchange=\"form_update();\">\n        \t\t\t  <option value=\"apex\">Ape-X</option>\n        \t\t\t  <option value=\"a2c\">A2C</option>\n        \t\t\t    <option value=\"dqn\">DQN</option>\n        \t\t\t      <option value=\"es\">ES</option>\n        \t\t\t      <option value=\"ga\">GA</option>\n        \t\t\t        <option value=\"rainbow\">Rainbow</option>\n        \t\t</select>\n\n        \t\t<select class='form-control-sm input-lg' id=\"run\" onchange=\"form_update();\">\n        \t\t\t  <option value=\"1\">Run 1</option>\n        \t\t\t  <option value=\"2\">Run 2</option>\n        \t\t\t    <option value=\"3\">Run 3</option>\n        \t\t</select>\n\n        \t\t<select class='form-control-sm input-lg' id=\"game\" onchange=\"form_update();\">\n        \t\t\t<option value=\"Alien\">Alien</option>\n        \t\t\t<option value=\"Amidar\">Amidar</option>\n        \t\t\t<option value=\"Assault\">Assault</option>\n        \t\t\t<option value=\"Asterix\">Asterix</option>\n        \t\t\t<option value=\"Asteroids\">Asteroids</option>\n        \t\t\t<option value=\"Atlantis\">Atlantis</option>\n        \t\t\t<option value=\"BankHeist\">BankHeist</option>\n        \t\t\t<option value=\"BattleZone\">BattleZone</option>\n        \t\t\t<option value=\"BeamRider\">BeamRider</option>\n        \t\t\t<option value=\"Berzerk\">Berzerk</option>\n        \t\t\t<option value=\"Bowling\">Bowling</option>\n        \t\t\t<option value=\"Boxing\">Boxing</option>\n        \t\t\t<option value=\"Breakout\">Breakout</option>\n        \t\t\t<option value=\"Centipede\">Centipede</option>\n        \t\t\t<option value=\"ChopperCommand\">ChopperCommand</option>\n        \t\t\t<option value=\"CrazyClimber\">CrazyClimber</option>\n        \t\t\t<option value=\"DemonAttack\">DemonAttack</option>\n        \t\t\t<option value=\"DoubleDunk\">DoubleDunk</option>\n        \t\t\t<option value=\"Enduro\">Enduro</option>\n        \t\t\t<option value=\"FishingDerby\">FishingDerby</option>\n        \t\t\t<option value=\"Freeway\">Freeway</option>\n        \t\t\t<option value=\"Frostbite\">Frostbite</option>\n        \t\t\t<option value=\"Gopher\">Gopher</option>\n        \t\t\t<option value=\"Gravitar\">Gravitar</option>\n        \t\t\t<option value=\"Hero\">Hero</option>\n        \t\t\t<option value=\"IceHockey\">IceHockey</option>\n        \t\t\t<option value=\"Jamesbond\">Jamesbond</option>\n        \t\t\t<option value=\"Kangaroo\">Kangaroo</option>\n        \t\t\t<option value=\"Krull\">Krull</option>\n        \t\t\t<option value=\"KungFuMaster\">KungFuMaster</option>\n        \t\t\t<option value=\"MontezumaRevenge\">MontezumaRevenge</option>\n        \t\t\t<option value=\"MsPacman\">MsPacman</option>\n        \t\t\t<option value=\"NameThisGame\">NameThisGame</option>\n        \t\t\t<option value=\"Phoenix\">Phoenix</option>\n        \t\t\t<option value=\"Pitfall\">Pitfall</option>\n        \t\t\t<option value=\"Pong\">Pong</option>\n        \t\t\t<option value=\"PrivateEye\">PrivateEye</option>\n        \t\t\t<option value=\"Qbert\">Qbert</option>\n        \t\t\t<option value=\"Riverraid\">Riverraid</option>\n        \t\t\t<option value=\"RoadRunner\">RoadRunner</option>\n        \t\t\t<option value=\"Robotank\">Robotank</option>\n        \t\t\t<option value=\"Seaquest\">Seaquest</option>\n        \t\t\t<option value=\"Skiing\">Skiing</option>\n        \t\t\t<option value=\"Solaris\">Solaris</option>\n        \t\t\t<option value=\"SpaceInvaders\">SpaceInvaders</option>\n        \t\t\t<option value=\"StarGunner\">StarGunner</option>\n        \t\t\t<option value=\"Tennis\">Tennis</option>\n        \t\t\t<option value=\"TimePilot\">TimePilot</option>\n        \t\t\t<option value=\"Tutankham\">Tutankham</option>\n        \t\t\t<option value=\"UpNDown\">UpNDown</option>\n        \t\t\t<option value=\"Venture\">Venture</option>\n        \t\t\t<option value=\"VideoPinball\">VideoPinball</option>\n        \t\t\t<option value=\"WizardOfWor\">WizardOfWor</option>\n        \t\t\t<option value=\"YarsRevenge\">YarsRevenge</option>\n        \t\t\t<option value=\"Zaxxon\">Zaxxon</option>\n        \t\t</select>\n\n        \t\t<select class='form-control-sm input-lg' id=\"tag\" onchange=\"form_update();\">\n        \t\t\t<option value=\"final\">Final</option>\n        \t\t\t<option value=\"400M\">400M Frames</option>\n        \t\t\t<option value=\"1B\">1B Frames</option>\n        \t\t\t<option value=\"1HR\">1 hour</option>\n        \t\t\t<option value=\"2HR\">2 hours</option>\n        \t\t\t<option value=\"4HR\">4 hours</option>\n        \t\t\t<option value=\"6HR\">6 hours</option>\n        \t\t\t<option value=\"10HR\">10 hours</option>\n        \t\t\t<option value=\"initial\">Initial</option>\n        \t\t</select>\n        </div>\n    </div>\n    <br/>\n\n    <div class='container'>\n        <div class='row'>\n            <table><tr><td>\t\n        \t\t\t    <canvas id=\"cvs\" width=\"550\" height=\"1000\" style=\"cursor: crosshair; display: none\">[No canvas support]</canvas></td>\n            <td>\n        \t    <canvas id=\"cvs2\" width=\"500\" height=\"500\">[No canvas support]</canvas></td>\n            <td><canvas id=\"cvs3\" width=\"500\" height=\"500\">[No canvas support]</canvas>\n            </td>\n        \t    </tr>\n            </table>\n        </div>\n\n        <video id=\"atarivideo\" !autoplay controls loop style=\"width: 200px; display: none\"></video>\n    </div>\n    <br/>\n\n    <div class='container'>\n        <div class='row'>\n            <h4>Playback controls</h4>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"resetButton\">\n                <span class=\"glyphicon glyphicon-backward\" aria-hidden=\"true\"></span> Rewind\n            </button>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"stopButton\">\n                <span class=\"glyphicon glyphicon-stop\" aria-hidden=\"true\"></span> Stop\n            </button>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"playButton\">\n                <span class=\"glyphicon glyphicon-play\" aria-hidden=\"true\"></span> Play\n            </button>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"slowButton\">\n                <span class=\"glyphicon glyphicon-play\" aria-hidden=\"true\"></span> SlowMo\n            </button>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"framePlus\">\n                <span class=\"glyphicon glyphicon-plus\" aria-hidden=\"true\"></span> FramePlus\n            </button>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"frameMinus\">\n                <span class=\"glyphicon glyphicon-minus\" aria-hidden=\"true\"></span> FrameMinus\n            </button><br/>\n        </div>\n    </div>\n    <br clear=\"all\" />\n\n    <div class=\"container\">\n        <div class=\"row\">\n            <h4>Advanced features</h4>\n            <button type=\"button\" class=\"btn btn-primary btn-small\" id=\"toggleDrag\">Toggle Draggable Timeline</button>\n            <button type=\"button\" class=\"btn btn-primary btn-small\" id=\"toggleActivation\">Toggle Full Activation View</button>\n        </div>\n    </div>\n\n    <div class=\"container\">\n        <div class=\"row\">\n            <br/><br/>\n            <button type=\"button\" class=\"btn btn-default btn-small\" id=\"urlCopyButton\">BookmarkURL</button>\n            <textarea class='form-control' id=\"urlText\" rows=\"2\" cols=\"80\">\n            </textarea>\n        </div>\n    </div>\n\n    <br clear=\"all\" />\n    <br/>\n    <div class=\"container\">\n        <div class=\"row\">\n           <b> Note this webapp borrows from <a href=\"https://www.rgraph.net/blog/an-example-of-html5-canvas-video-zoom.html\">this very helpful demo</a>.</b><br/>\n        </div>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/classify_state.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport numpy as np\nimport tensorflow as tf\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import classification_report\nfrom tensorflow import keras\n\n\nalgos = ['a2c','es','ga','apex','rainbow','dqn']\n\nalgos_2 = algos[:6]\nenv_name = 'SeaquestNoFrameskip-v4'\n# env_name = 'ZaxxonNoFrameskip-v4'\nroot_dir = '/rl_zoo/data/'\nrollout_path_template = root_dir + 'rlzoo/{}/{}/model{}_rollout.npz'\nsplit_by_rollout = False\nn_last_frames = 1\nnum_models = 3\n\ntrain_frames, train_labels, test_frames, test_labels = None, None, None, None\n\nif split_by_rollout:\n    idx = np.arange(num_models)\n    np.random.shuffle(idx)\n    train_idx, test_idx = idx[:-1], idx[-1:]\n    for algo in algos_2:\n        for model_num in range(num_models):\n            rollout = np.load(rollout_path_template.format(algo, env_name, model_num + 1))\n            observations = rollout['observations'][:, :, :, :n_last_frames]\n            labels_ = np.empty(observations.shape[0])\n            labels_.fill(algos_2.index(algo))\n            if model_num in train_idx:\n                if train_frames is None:\n                    train_frames = observations\n                    train_labels = labels_\n                else:\n                    train_frames = np.append(train_frames, observations, axis=0)\n                    train_labels = np.append(train_labels, labels_, axis=0)\n            elif model_num in test_idx:\n                if test_frames is None:\n                    test_frames = observations\n                    test_labels = labels_\n                else:\n                    test_frames = np.append(test_frames, observations, axis=0)\n                    test_labels = np.append(test_labels, labels_, axis=0)\nelse:\n    idx = np.arange(num_models)\n    np.random.shuffle(idx)\n    train_idx, test_idx = idx[:-1], idx[-1:]\n    frames, labels = None, None\n    for algo in algos_2:\n        for model_num in range(num_models):\n            rollout = np.load(rollout_path_template.format(algo, env_name, model_num + 1))\n            observations = rollout['observations'][:, :, :, :n_last_frames]\n            labels_ = np.empty(observations.shape[0])\n            labels_.fill(algos_2.index(algo))\n            if model_num in train_idx:\n                if frames is None:\n                    frames = observations\n                    labels = labels_\n                else:\n                    frames = np.append(frames, observations, axis=0)\n                    labels = np.append(labels, labels_, axis=0)\n    indices = np.random.permutation(frames.shape[0])\n    split_threshold = int(frames.shape[0] * 0.8)\n    train_idx, test_idx = indices[:split_threshold], indices[split_threshold:]\n    train_frames, train_labels = frames[train_idx, :], labels[train_idx]\n    test_frames, test_labels = frames[test_idx, :], labels[test_idx]\n\nprint('train shape', train_frames.shape, train_labels.shape)\nprint('test shape', test_frames.shape, test_labels.shape)\n\nframe_size = train_frames.shape[1]\nkernel_size = 3\nmodel = keras.Sequential([\n    keras.layers.Conv2D(16, kernel_size, activation=tf.nn.relu, input_shape=(frame_size, frame_size, n_last_frames)),\n    keras.layers.Conv2D(32, kernel_size, activation=tf.nn.relu),\n    keras.layers.Flatten(),\n    keras.layers.Dense(128, activation=tf.nn.relu),\n    keras.layers.Dense(len(algos_2), activation=tf.nn.softmax)\n])\nmodel.compile(optimizer=tf.train.AdamOptimizer(), \n              loss='sparse_categorical_crossentropy',\n              metrics=['accuracy'])\nmodel.fit(train_frames, train_labels, epochs=1, callbacks=[keras.callbacks.EarlyStopping()], validation_split=0.1)\n\n# eval\ntest_loss, test_acc = model.evaluate(test_frames, test_labels)\nprint('Overall test accuracy:', test_acc)\npred_labels = model.predict_classes(test_frames)\ncnf_matrix = confusion_matrix(test_labels, pred_labels)\nprint('confusion matrix')\nprint(cnf_matrix)\nprint(classification_report(test_labels, pred_labels, target_names=algos_2))\n"
  },
  {
    "path": "examples/demo.py",
    "content": "# Copyright (c) 2018 Uber Technologies, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n#     Unless required by applicable law or agreed to in writing, software\n#     distributed under the License is distributed on an \"AS IS\" BASIS,\n#     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n#     See the License for the specific language governing permissions and\n#     limitations under the License.\n\nimport sys\n\nsys.path.append(\"..\")\n\nimport atari_zoo\nfrom atari_zoo import MakeAtariModel\nfrom pylab import *\n\nalgo = \"a2c\"\nenv = \"ZaxxonNoFrameskip-v4\"\nrun_id = 1\nm = MakeAtariModel(algo,env,run_id)()\n\n# get observations, frames, and ram state from a representative rollout\nobs = m.get_observations()\nframes = m.get_frames()\nram = m.get_ram()\n\n# visualize first layer of convolutional weights\nsession = atari_zoo.utils.get_session()\n\nm.load_graphdef()\nm.import_graph()\n\nconv_weights = m.get_weights(session,0)\natari_zoo.utils.visualize_conv_w(conv_weights)\nshow()\n"
  },
  {
    "path": "notebooks/Basic visualization.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/joel.lehman/code/rl_base/env/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\\n\",\n      \"  from ._conv import register_converters as _register_converters\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"pygame 1.9.4\\n\",\n      \"Hello from the pygame community. https://www.pygame.org/contribute.html\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import sys\\n\",\n    \"sys.path.append(\\\"..\\\")\\n\",\n    \"\\n\",\n    \"import tensorflow as tf\\n\",\n    \"import lucid\\n\",\n    \"import atari_zoo\\n\",\n    \"from atari_zoo import MakeAtariModel\\n\",\n    \"\\n\",\n    \"from lucid.misc.io import show\\n\",\n    \"import lucid.optvis.objectives as objectives\\n\",\n    \"import lucid.optvis.param as param\\n\",\n    \"import lucid.optvis.transform as transform\\n\",\n    \"import lucid.optvis.render as render\\n\",\n    \"\\n\",\n    \"from atari_zoo import synthetic_inputs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#tf.get_default_session().close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## High-level interface to optimize inputs to maximize activation of particular channels / FC neurons\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import atari_zoo.synthetic_inputs\\n\",\n    \"from atari_zoo.synthetic_inputs import make_regularization,visualize_neuron,cppn_default_f\\n\",\n    \"from lucid.misc.io.showing import images\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Example: lane features in Rainbow Freeway network\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"algorithm = 'rainbow'\\n\",\n    \"env='FreewayNoFrameskip-v4'\\n\",\n    \"run_id = 1\\n\",\n    \"tag='final'\\n\",\n    \"\\n\",\n    \"out = visualize_neuron(algo=algorithm,env=env,run_id=run_id,tag=tag,layer_no=3,neuron=1,step_n=1024,regularization=make_regularization(L1=1e-8,TV=1e-8))\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"images(out[0].transpose((2,0,1)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Same neuron, visualized through a CPPN (ala \\\"Differentiable Image Parameterizations\\\" on distill.pub)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Freeway/1/graph_def.pb\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"out = visualize_neuron(algo=algorithm,env=env,run_id=run_id,tag=tag,layer_no=3,neuron=1,step_n=1024,param_f=cppn_default_f,lr=0.001)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"images(out[0].transpose((2,0,1)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## More manual approach to integrating with Lucid (more flexibility but more verbose code)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Freeway/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FreewayNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FreewayNoFrameskip-v4_1\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 432x288 with 0 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x216 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x216 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x216 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import gym\\n\",\n    \"import pylab\\n\",\n    \"from lucid.optvis.objectives import wrap_objective, Objective\\n\",\n    \"import matplotlib\\n\",\n    \"\\n\",\n    \"env = \\\"FreewayNoFrameskip-v4\\\"\\n\",\n    \"algo = 'rainbow'\\n\",\n    \"run_id=1\\n\",\n    \"\\n\",\n    \"#alternative parameterization that only optimizes the \\\"now\\\" frame\\n\",\n    \"def only_current_frame(shape):\\n\",\n    \"    shape_1 = shape[:-1]+[1,]\\n\",\n    \"    \\n\",\n    \"    shape_2 = shape[:]\\n\",\n    \"    shape_2[-1] -= 1\\n\",\n    \"    \\n\",\n    \"    print(shape_1,shape_2)\\n\",\n    \"    \\n\",\n    \"    current_frame = lucid.optvis.param.spatial.naive(shape_1)\\n\",\n    \"    zero_frames = tf.zeros(shape_2)\\n\",\n    \"       \\n\",\n    \"    processed_current = tf.nn.sigmoid(current_frame)\\n\",\n    \"    processed_frames = tf.concat([zero_frames,processed_current],-1)\\n\",\n    \"    return processed_frames\\n\",\n    \"\\n\",\n    \"#param = lambda: only_current_frame([1,84,84,4])\\n\",\n    \"param = lambda: synthetic_inputs.image([1,84,84,4])\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"tf.reset_default_graph()\\n\",\n    \"m = MakeAtariModel(algo,env,run_id,local=False)()\\n\",\n    \"m.load_graphdef()\\n\",\n    \"\\n\",\n    \"transforms = [\\n\",\n    \"    transform.jitter(2),\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"pylab.gray()\\n\",\n    \"\\n\",\n    \"regularize = 1e-9*objectives.L2()-1e-9*objectives.L1()-1e-8*objectives.total_variation()\\n\",\n    \"\\n\",\n    \"font = {'family' : 'normal',\\n\",\n    \"        'weight' : 'bold',\\n\",\n    \"        'size'   : 18}\\n\",\n    \"\\n\",\n    \"matplotlib.rc('font', **font)\\n\",\n    \"\\n\",\n    \"#loop through all available actions in the game\\n\",\n    \"for neuron in range(0,3): #len(action_semantics)):\\n\",\n    \"    obj = objectives.channel(m.layers[-3]['name'],neuron)\\n\",\n    \"\\n\",\n    \"    #call out to lucid\\n\",\n    \"    out = render.render_vis(m, obj+regularize,\\n\",\n    \"                            param_f = param,\\n\",\n    \"                        transforms=transforms,verbose=False,thresholds=(512,))\\n\",\n    \"    \\n\",\n    \"    #now let's visualize the results...\\n\",\n    \"    frames = len(out)\\n\",\n    \"    fig = pylab.figure(figsize=(12,3))\\n\",\n    \"    \\n\",\n    \"    if neuron==0:\\n\",\n    \"            fig.suptitle(algo) #action_semantics[action],fontsize=16)\\n\",\n    \"    else:\\n\",\n    \"            fig.suptitle(\\\"\\\")\\n\",\n    \"\\n\",\n    \"    for y in range(frames):\\n\",\n    \"        \\n\",\n    \"\\n\",\n    \"        for x in range(4):\\n\",\n    \"            num = (y*4+x)+1\\n\",\n    \"            ax=pylab.subplot(frames,4,num)\\n\",\n    \"            fig = pylab.imshow(out[y][0,:,:,x])\\n\",\n    \"            fig.axes.get_yaxis().set_visible(False)\\n\",\n    \"            ax.set_xticks([], [])\\n\",\n    \"            \\n\",\n    \"            if x<3:\\n\",\n    \"                title=\\\"T-%d\\\" % (3-x)\\n\",\n    \"            else:\\n\",\n    \"                title=\\\"Now\\\"\\n\",\n    \"                \\n\",\n    \"            size = fig.get_size() # get fig size in pixels\\n\",\n    \"            ax.set_xlabel(title)\\n\",\n    \"            im = out[y][0,:,:,x]\\n\",\n    \"            \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Feature inversions / caricatures\\n\",\n    \"\\n\",\n    \"In the spirit of https://distill.pub/2018/building-blocks/\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SeaquestNoFrameskip-v4_2\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import atari_zoo\\n\",\n    \"import pylab\\n\",\n    \"\\n\",\n    \"algo = 'a2c'\\n\",\n    \"env = 'SeaquestNoFrameskip-v4'\\n\",\n    \"run_id = 2\\n\",\n    \"\\n\",\n    \"#do simple output neuron visualization (Q-value of action X)\\n\",\n    \"tf.reset_default_graph()\\n\",\n    \"\\n\",\n    \"session = atari_zoo.utils.get_session()\\n\",\n    \"\\n\",\n    \"m = MakeAtariModel(algo,env,run_id,local=False)()\\n\",\n    \"#load in model\\n\",\n    \"m.load_graphdef()\\n\",\n    \"m.import_graph()\\n\",\n    \"\\n\",\n    \"#print(session.graph.get_operations())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"observations = m.get_observations()\\n\",\n    \"frames = m.get_frames()\\n\",\n    \"frames_float = frames / 255.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 432x288 with 0 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"transforms = [\\n\",\n    \"    transform.jitter(2),\\n\",\n    \"    #transform.random_scale([n/100. for n in range(80, 120)]),\\n\",\n    \"    #transform.random_rotate([n/1. for n in range(-5,5)]) # + range(-5,5) + 10*range(-2,2)),\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"pylab.gray()\\n\",\n    \"\\n\",\n    \"#feature inversion objective\\n\",\n    \"@objectives.wrap_objective\\n\",\n    \"def dot_compare(layer, batch=1, cossim_pow=0):\\n\",\n    \"  def inner(T):\\n\",\n    \"    dot = tf.reduce_sum(T(layer)[batch] * T(layer)[0])\\n\",\n    \"    mag = tf.sqrt(tf.reduce_sum(T(layer)[0]**2))\\n\",\n    \"    cossim = dot / (1e-6 + mag)\\n\",\n    \"    cossim = tf.maximum(0.1, cossim)\\n\",\n    \"    return dot * cossim ** cossim_pow\\n\",\n    \"  return inner\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"frames\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAADSCAIAAABCR1ywAAAE+ElEQVR4nO3cQWsUZxzH8UfJ3RwqGCgUwVu3FDzlZggIoVfpSQ8a38EiUt9BCGFeQgzUHL1KQAg5emihhxx7qQgKwatY0NLDI8NkZp/dZ3bneWb+v/l+DrKOk3XK1/8zY/apzgEAAAAAKq6EfuGn2yc5rwOJXO37ApDWWt8X0Kfjo73y9f2Hvy19fMjGu0QfH+2VkXw5/9M5x2e+HrjxLtGhPCayxRtv4JHgHvyN9XttyHgDh+6jhu6vMViixY36Kbp2pPqE3DzubC7d4w08EizR4ggsjsDiCCzOduDmE+9yx4UZDkzdGIYDI4axwH4Kj4/2ynEsj7Q6Ph7GAjtW5pbsBUYr5gO3/dzeyveQu2Lv40KKtsKHDeLML9GYj8Digvfgm+5rzutAIkywuOAE//zf55zXgUSYYHHBCf7Rvc15HUiECRYXnOD1q7/nvA4kwgSLC07w15ufcl4HEmGCxQUn+OO1f3NeBxIJBn5360vO60AiwY8L3fej3ukig3uwuOASfeOH6zmvA4kwweIILC64RH/45yLndSAR7sHiWKLFsUSLY4IBy/hWpTiWaHEEFkdgcQQWR2BxBBZHYHEEFkdgcQTu2fZkK+n7E7hnp+dnSRvzvWhxTHBuDw7PmwfTDTGBe9BsfHp+5tJkJnAODw7PfdQybXkkNe7BmczM+WJ34l/42fVz3C0meEC2J1udr9L2/jFSi/z4vtidlC+qv5pufB2B86gWrS3LXqK6jntw77YnW+nqOu7B/Upd1xG4RxnqOpZoeUywOAKLI7A4AosjsDgCiyOwOAKLI7A4AosjcM/YFy2OfdFYCROcG/ui9bEvWg37ovWxLxrsizaLfdHi2Bc9XuyLVsa+aGXsi0YHmGBxBBZHYHEEFkdgcQQWR2BxBBZHYHEEFkfgnrEvWhz7orESJjg39kXrY1+0GvZF62NfNNgXbRb7osWxL3q82BetjH3RytgXjQ4wweIILI7A4ggsjsDiCCyOwOIILI7A4mwHfv385evnL/u+ikGz+nEhXSPZnmAsRGBxBBY39I8L/b327qN7Lu6+689EycZDFo9US+sscKjBiiMVM7vx8z1CNpboeCzRNTaW6BiknWnoE4wV8dckcQQWR2BxBBZHYHHhvyZ993fGy0AqTLC48ASv/5HxMpAKEywuPMFrf+W7CiTDBIsjsDgCi4v6uLD4pZh5fPpq2slF8P7p3j/4cWFRzH7TkLb/MaGL5v27ff/OAsf8Zm0vmvdf/f2TBMZw8JAljsDiCCyOwOIILK7dvujp9Nvzd1EU0+k09GP1nOrJ/h0WPp/v7OzUjvz5+E6r6+zRxa/P+r6ES1pPcDVP2bL2uiiK8rTyRfUEZLP8Eu3LNX/0ypyhPwTIY/nAvtbCZs1RRk6tA9eW4oXnxJyPdPhWpTj+miSOwOLMB94/2Oj7EgbNfGDMZ/j/8Pez+/TJ+74vZNDMT/D+wQar9BxWJ5jxjWQscHVYqRvD2BL99Ml735W6kYwFds7tH2xQN56xwNRty1hg6gIAZIT/rUqztnfezDx+erI5/5zqCRicZrPqkdrr0B8CPcaeokN8sPLHUNryp35Y/ZnNr60eab6DLSKB3eUFNrTYlnXLZqcnm7WTF67ktugEXhijOrvVg/O/0HpjncAxj0jNYZ3/VQKPXTqBqyIfkmeOb+2IQGMAAAAAAAAAAJL6H3XdDkQw/mHjAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAADSCAIAAABCR1ywAAAFAUlEQVR4nO3cQWsUZxzH8afivR4sGBCK0JsrBU/eDAtC6FU81YPad7CEUN9BCGFeggmYHL1KQAgePSh4yNGLIiiEXkuFpvTwhGGc2WdnZrPP88z/N9/PIcTpZn3ab/7PjpunOgcAAAAAqPgh9A9u3T5KuQ5Ecin3AhDX5dwLyOlwf7v8/PdHfy59fcjGu0Uf7m+XkXw5/8sF1+d+PnDj3aJDeUxk6268gUeC1+Bz1l9rQ8YbOPQ6auj1tQu2aHGjvouuXaneITevO5tb93gDjwRbtDgCiyOwOAKLsx24ece73HVhhgNTtwvDgdGFscB+Cg/3t8txLK/0uj4exgI7duae7AVGL+YD9/25vZX3kFfF3o8LKdoLP2wQZ36LxmIEFhd8Db7hzlKuA5EwweKCE/zrf/+kXAciYYLFBSf4pvuUch2IhAkWF5zgK5eep1wHImGCxQUn+OzG3ynXgUiYYHHBCf7rx28p14FIgoE///JvynUgkuCPC931UZ90kcFrsLjgFn3t559SrgORMMHiCCwuuEV//Xiach2IhNdgcWzR4tiixTHBgGW8VSmOLVocgcURWByBxRFYHIHFEVgcgcURWByB85tO1uM9OYHzOz55Ha8x70WLY4KHItIQEziDh89OmhePT167CJkJnMfcxjHwGpyIL3rwZFJLe/Bk4j/xs+vneIWY4ER8yNbBnU7WV7tL2/vLSCVFGl9H4GRqW7Qf6OlkfXq+Q0ep63gNTu/hs5PyddebTtYj1XUEzi5qXcdNVl6x6zomWB4TLI7A4ggsjsDiCCyOwOIILI7A4ggsjsDiCJwf56LFcS4ay2OCh4Jz0To4F62Pc9FqOBctjnPRo8a5aPM4Fz0WnIseF85FK+NcNC6KCRZHYHEEFkdgcQQWR2BxBBZHYHEEFkdgcQTOj3PR4jgXjeUxwUPBuWgdnIvWx7loNZyLFse56FHjXLR5nIseC85FjwvnopVxLhoXxQSLI7A4AosjsDgCiyOwOAKLI7A4AosjsDgCiyOwOAKLG3rgV3svXu29yL0Kw4Ye2CPz0mwExtIILI7A4oZ4ZKfLy+29x/cTrESA1XPR1W8CYi8QDJz9v6D/Tbl5viCrW7TH7LYaYmCPzCsx3NfgLtnYwFsNd4KxEuEJvvoh4TIQC290iAtP8JW3CZeBWJhgceEJvvw+3SoQDRMsjsDiCCyu0ztZxW/F3Ouzl7OVLILnj/f8wXeyimL+k4b0/ZcJLZrnX+3zryxwl9+s76J5/os/f5TAGA5ussQRWByBxRFYHIHF9TuyM5ud338XRTGbzUIfq4+pPtg/Q+v9+cbGRu3Kuz/u9lpnRqcPnuZewnd6T3A1T9my9nlRFOXDyk+qD0Ayy2/Rvlzzo1fmDH0TII3lA/tarc2ao4yUegeubcWtj+nyeMTDW5Xi+GOSOAKLMx94Z3ct9xIGzXxgLDbc//mslZ/drc0vuRcyaOYneGd3jV16AasTzPh2ZCxwdVip24WxLXpr84vvSt2OjAV2zu3srlG3O2OBqduXscDUBQDICP81SmZNN97MvX58dGfxY6oPwOA0m1Wv1D4PfRPoMXYXHeKDlR9Dactf+mH1j2x+bfVK8xlsEQnsvt9gQ5ttWbdsdnx0p/bg1p3cFp3ArTGqs1u9uPgLrTfWCdzlFqk5rIu/SuC2SydwVceb5LnjW7si0BgAAAAAAAAAgKj+B6mLDOHnMDsjAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAADSCAIAAABCR1ywAAAE+ElEQVR4nO3cMWsUTQCH8VHSa6FgQBDBzhPBKp0hIARbsdJC4zc4RPQbhBD2I2hAU9pKQAgpLRQsUtoogkKwFQUVi5Fls3tzN7vuzM789/kV4dx3s87L48zuXUaNAQAAAABUnHD9hyvX9mKOA4GcHHoACGtp6AEMaXdns3x9597jzsdTNt4lendns4xky9lfzjk+83XixrtEu/Jkkc3feAOPBPfgf3K/17qMN7DrPprR/dUHS7S4UT9F145Un5Cbx02eS/d4A48ES7Q4AosjsDgCi8s7cPOJt9txYRkHpq6PjAPDR2aB7Szc3dksp2N5pNXx8cgssGFlbim/wGgl+8Btf26fy2fIfcnvx4UUbYUfNojLfonGfAQW57wHXzS/Y44DgTCDxTln8NU/P2KOA4Ewg8U5Z/Bl8ynmOBAIM1iccwafPvk85jgQCDNYnHMG/774PeY4EAgzWJxzBn879TPmOBCIM/DnS79ijgOBOH9caM6PeqeLDOcMPnfhbMxxIBBn4K8fj2KOA4Ewg8XxNkkcS7Q4lmhxLNHiWKLFsUQDOeOjSnE8ZIkjsDgCiyOwOAKLI7A4AosjsDgCiyNwKtYmqyEuS+BU7B8ehGjMZ9HimMFp6X0SEzgt+4cHptfMBB7M3aeHEX4XAg+p2Xhtsro2WbXzuBc8ZEVli77YmNTSvtiY2BfVxbmXzASObebKbAPbuj1OX5PjvzYrqZy4/dY1BI6stkSXK7MxB/3eeksEjqpS9NjrQHUN9+AUhKtrCCyP98HiCCyOwOIILI7A4ggsjsDiCCyOwOIILI7AqWBftDj2RaMLZnBa2Bctjn3ROtgXrY990WrYF62PfdFjxL5oEeyLFse+6DFiXzS6432wOAKLI7A4AosjsDgCiyOwOAKLI7A4AosjcCrYFy2OfdHoghmcFvZFi2NftA72RetjX7Qa9kXrY1/0GLEvWgT7osWxL3qM2BeN7ngfLI7A4ggsjsDiCCyOwOIILI7A4ggsjsDiCCyOwOIILC7FwK+fvXz97OXQoxCRYmCLzL1INzB6QWBxBBaXypYdn9vtjfu3yjPtayyU065K0naQ1hJ94/6thf14um4lrRlMud6lcg+2/O/E8JRWYB/ciVvJLzBacd+Dz3yIOAyEktZTNHrnnsGn30YcBkJhBotzz+Cl9/FGgWCYweIILI7A4rw+iy5uFjOPT19NexkE1w93fecnWUUx+6Iubf9nXIPm+v1ev7fAPr9Z20Fz/f+/fpDASAcPWeIILI7A4ggsjsDi2m26m07/PX8XRTGdTl1fq+dUT7ZXWPh8vr6+Xjvy7sH1VuMc0NHtJ0MP4ZjWM7iap2xZe10URXla+aJ6AqLpvkTbcs2vVpnT9YcAcXQPbGstbNacyoipdeDaUrzwHJ/zEQ4fVYrjbZI4AovLPvDW9vLQQ0ha9oExX1p/fbQVO3cfPfwy9ECSlv0M3tpeZpWeI9cZzPT1lFng6mSlro/MluhHD7/YrtT1lFlgY8zW9jJ1/WUWmLptZRaYugAAGe5/Rilba+tvZh7f31uZf071BCSn2ax6pPba9YdAT2ZP0S42WPnVlbb8pZ2s9szm91aPNK+QF5HA5vgC61psy7pls/29ldrJC1fyvOgEXhijOnerB+d/Y+6NdQL7PCI1J+v87xJ47NIJXOX5kDxz+taOCDQGAAAAAAAAACCov2zKGFbARkYvAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAADSCAIAAABCR1ywAAAFAElEQVR4nO3cMYsWRxzH8YnYxyKBHASCkC5PCFjZ5TgQjrSSKimiaa0eRMw7OI5jX0I8iFfahgPhsEyRQIor0ySEGJC0kkAUi9Fl3X3meWafm5md/2+/n+J4XPfWka8zuz7PqHMAAAAAgI53Qj/x6bXTkuNAJpemHgDyujz1AKZ0cnzQvv7qm/tbH6/ZfJfok+ODNpIv53+45vjK15Wb7xIdymMiW7z5Bp4J7sGvWb/Xhsw3cOg+auj+GoMlWtysn6J7R7pPyMPjzubSPd/AM8ESLY7A4ggsjsDibAcePvFud1yY4cDUjWE4MGIYC+xn4cnxQTsd2yOjjs+HscCOlXkke4ExivnAYz+3t/Iecir2Pi6k6Ch82CDO/BKN9QgsLngPvupelBwHMmEGiwvO4M9e/ltyHMiEGSwuOIM/cX+UHAcyYQaLC87gK5d+KDkOZMIMFhecwS+uPi85DmTCDBYXnMH/vPtfyXEgk2DgPz/+v+Q4kEnw40L34ax3usgIzuAPPnq/5DiQSTDw378/KzkOZMIMFsdfk8SxRItjiRbHEi2OJVocSzRgGW9ViuMhSxyBxRFYHIHFEVgcgcURWByBxRFYHIErsrfYTX5NAlfk7PxJ8sa8Fy2OGVydtJOYwNU5O3/i0mUmsDgCT+nr78+HB/cWu3uLXT+PL47AE1vZ2L3JfPHr8xRdmi/68Pail/bh7YV7c+tNNX0dgSexctb+1dzxLxLWdSzR9fBd09Z1Fv+/aOt6S7RfmZ1zCR+sughcWlvU5a/ruAfL4x4sjsDiCCyOwOIILI7A4ggsjsDiCCyOwOIIXBH2RYtjXzRGYwZXh33R4tgXjREIPCX2RetjX7Qa9kXrY1/0HLEvWgT7osWxLxopcQ8WR2BxBBZHYHEEFkdgcQQWR2BxBBZHYHEErgj7osWxLxqjMYOrw75oceyLxggEnhL7ovWxL1oN+6L1sS96jtgXLYJ90eLYF42UuAeLI7A4AosjsDgCiyOwOAKLI7A4AosjsDgCiyOwOAKLsxf48YNHjx88mnoUZlj6PJiuW7A3gzEKgcURWFyNW3b8vfbGrZsu7r7rz8RK9T5k8UiVRI1L9I1bNzdOyphz4OqcwTFzl/kdqcbA8ZjEG9X4kIWEarwHI6HwEv3ebwWHgVyYweLCM/jKzwWHgVyYweLCM/jyr+VGgWyYweIILI7A4qLeqmy+aFYeX/64TDIIrp/v+sG3Kptm9UVDxv5mQoPm+mmvnyxwzC82dtBc/+LXzxIY9eAhSxyBxRFYHIHFEVjcuD1Zy+Xr5++maZbLZehr95zuyf4KG5/P9/f3e0d++fbzUeOc0LMvv5t6CG8ZPYO7edqWvddN07SntS+6J6CY7ZdoX2741Wtzhv4QoIztA/taG5sNpzJKGh24txRvPCfmfOTDW5Xi+GuSOAKLMx/48Ghn6iFUzXxgrGf4Xxf6uXvv7tOpB1I18zP48GiHVXoNqzOY6RvJWODuZKVuDGNL9L27T31X6kYyFtg5d3i0Q914xgJTdyxjgakLAJAR/n+yzNrb/2nl8bPT6+vP6Z6A6gybdY/0Xof+EOgx9hQd4oO1X0Np2x/6yerPHH5v98jwCraIBHZvL7Chxbat2zY7O73eO3njSm6LTuCNMbpzt3tw/Tdab6wTOOYRaThZ13+XwGOXTuCuyIfkldO3d0SgMQAAAAAAAAAAWb0CJ+sKyesUv6QAAAAASUVORK5CYII=\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"pre-processed frames\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAAAAAA5AE8dAAACm0lEQVR4nO2Yy2sTURSHv4nTaR426SvVplDFZ7EKreiixSJBQQutdCG60o3UhaALN64ULG6EIoL/gFs34s4XLgRBhFJQ62NTLaVStY2tTZtkkjRxYQ3pDM4jc4ck6Fn+5pxvLve8JoF/2iSAPWGxUI8N3320Xa5RGGGEEUNH2Qb07WDgWaZffmHqaAfa3XQ/X9MzCulg2tCx7HcqDho5D1wFLlmHmtxpnxylYeMwbW0DHHtsFWp20ijzDENsAMatMt1JlAwg17oA9YdcgCo+F6CS5ALUFxQLlQDCfrFQGaCx2QXosuAJIANkjSeZbZMAvHamqgWTAeoEJ6o887RcUF2Ti4AmtV3uHHoK8ppEO23ToR0wGtqZeV0sOq3QL4mJn9sXxtaLAgZKy3etIiBROmbl1mn1QGsjwqF+1CUNxSl0qOvCELktYqG1vfGGQMfn9aLj4m+ep31ao7myoiu2pKoHqrgBTWu/mZ1DB0EVvE5ORhRGg7sS74tFp+sk/nFyvmNR/DoJL2Q1ioBPszmdUrF1WsVQw0TdVp48KAVqfNJEKcg/ddoIpLSPbuXzgI/ZG3ahHoDOntaUjolcA5Bc1Q0hUzPvqJtXSoNG6mzHGZoM4NngAjS36gI0UN+5F5Yesrim1nMaeP61kL7fwr2Cg9e7+fA6oZ7+IEy8y6ywdqdnuwov+QRsK3ppfA48W4uEqRyEi3OgjUjP6KBCzN3ev7us1qnZ7JmnJ65HBwE4DteMQpUDf3tSOOkkK9MXz3GHqaM5pyct053qf9GYmuniG4v5+wRDkx92lzAXTKDf9ttHumRW/uVrnz7YOtv0KNgbQ30jCBqQkqFuVY37V0OvjnjzqZe+WZMIK22aogX4Ma7MHAKJTRZC/ltV2C+aho09cghLRgAAAABJRU5ErkJggg==\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAAAAAA5AE8dAAACkUlEQVR4nO2XTUgUYRjHf7ON2+6qu4r4uVlSVJgVKe4hSUQSUtCgkyeDCL1V0KFbQQadpEu3uuy1S9eK6BBEEaUHS4rIEjG1ciN0xZn9mi6y7KzsfOzMyyr5P/7neX/z8L7P+zwz8F9LAjhW6y7UYyP2BOHrZV7GGWfcMFC2Af0wVP4iOSC/Mg20A22veayVnZ6ARDBhGFjyPXUP2jQG3ASuWoea7Gm33Et1xSjh8CDnnlmFmmXaywqjEBuEKatMMQclA8h7BUADIQFQr18AVJIEQP1Bd6ESQLjSXagMUFEjABp3uQPIACnjTmZbEoDPTle1IBmgMuAutDT9tGTQRhHQ5bxr7hzacghNi+gsCaC2+NO/cETLSBOdmjaZYzqt0K+HtcXZzu8rOtNppgAd+dPLDegWbd863TnQfc0CoAsh/Th2Du0ZA7VVZzkuqRsZPNHmSZ3nFFofGH6YbJ7Rm7vFv02h1SKgqz63oXUNpBV3x0n/AV/Z6oMI6nSO6XScfD6pxZYjiz90pvPir4h3TKf01u6N2vnQe23F/l4ZZXopYvDQSIVKyn8HgNd915L2oYUzfScBXUprwYDCMiv+u1+iRUKbRPxGevYIgGbSAqDlVW3HYfUJfzfdKoaBl8uKojMeZQN8voYenVHFQBA+ziTX2dzTi6eyL/kGHMx56dpv8LTkGHMZqM09g/wViYUtUFck5O5nx0k0rlaqqdTI8/O3e4cA6IdbRku9nYWeZDOdZX3+ymXuM9eXcZppifb0l32o6Yh+Hwt0uwzd+HS0iL5gAv3ZYR8pSFbG0P75SONSzdNgV0z/yeQEWi5thNpVdS2QDr0969OUN/4lkxVWrqlCHfBnyrtwBiTqLSzZ1Y7QP4GrjtGMMAFjAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAAAAAA5AE8dAAACbElEQVR4nO3YS2gTQRjA8f+um3fzkJKqDQZRRPEBbWnAilWCQi2kHrx40ovUmx5Kryrm7EEQ714F8aqleFAEEaUHrRQqSimRam1U2pRk8/RgCElKN7vJDGk13/HLzG/n8e1MEvivQwE4EhSLqhbaHic0YbMTJ07csKFmAf0w5nmeG9VeNWxoBe3vflKyDd2FrC9r2LDtayoO7b0G3ARumEcbrOmwFmVn1zihUIyRKbNoo5FGWWEckjGYMWvK2SgNQHNIQN1+CajdJQFVFAmoyycWVQBCXrHo35HK2Kj0qgQ0b3ySWQ4FwGnlVDURGoDXLRZtz3naPrTulBODrshAS0SEoqo6GFOVSKm6Kluu0OIkBGbf1uQUgGBLdXr65cFPtRkB6MbYwnW6fdAeGejy4Zr7WAB6ACg4qzMtF/+Jrj4S08ovoWjOxmNVn6/JdYp/q6J138XEoCkZaFHwdQIDUYjoQq8TJmGv6OvEUYpOda6TfxJVRu41gxrX6cWhZkyDkrodnA8DqBOW0c2n78iHAXXOMmk0/dSDr014QHn6vTJ+Rqo7JKDFggTUEzh6DFaf8rucDXAJePEtk6lJPKo0cDp3n6lJBBj1wezH3DrlNb3SV3nIF2B/1UPXfoC6ryqxUIRg9R7U98gmNqBCQsq7X6nThyndq+fzl6cv3ImOAXAebhl1tQ9u9kllpJ9ZX7x+lfssnCu2OtI2remydbThFf0u6R4WjKbnDjVxLjRAvw9YJyWFmX/5wouRPUvdz3wnk+jvBaEeJe3v1/U1d8H/5qyzlHntWmrQw8xrmqEH+DljT5wChV0munRiW8QfQgGADLiIhXcAAAAASUVORK5CYII=\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAAAAAA5AE8dAAACgklEQVR4nO2YTWgTQRiGn002aZqYHykxtoFSBBG0gpVEUCwlKEih8eJBPOhF6kXqIQg5ebDQi/Qm3r2KIN5UiodiQQRb0arFg1JKoVqNSGLI3zbxYIm7RnezzQxpte/x3W+e/Xbmm/l2F/5rKQD7w2KhDhuxB4mmXG7GGWfcNFC1AZ1P+h5XhtUZy0A70IGuezXX0UkoB8qmgW2fU3HQnkvANeBK81CLOR1UE+zcMUo0OsKpR81CrTJN8IVRyIzAXLNMOQulAqgdEqDeoASou1MCVFEkQDsDYqEKQNQvFvozUxkLVchKgGrmJ5ltKQAeO6dqE1IB/F6x0Pacp+2DuiISoJVVCVBqSlwo1OlMn3N2xGq6k04BCLdSUkNxqMzM6q3Wy3462z0TXTBYrWf6B23iOt06UDUmAaq97Nc3ZBHQM1Ar+XRG6yV12a+RfZF/q7NaL36tptzd+87Q5baLf7NCncZXHDHQNePbiKDHLwhuJ5BO4o6VPb8MMe1EeyK4ncxqkam+eYO1vaP+DahjUgL0xkaYZiV1KzUBwFXbUJNMlQkA6387jTLZUbk0APftQxWAHhmfkQ6nBGh1TQLUFzrQD9kHfFt3Q5wFpj8WiwbjTj3A49k9ZDBCDAfg9ZtKnvU5vXCofpMPwB7dTXOfwdGnMxarENavwe8jyssNUCGSsvfrdXr7e8lf0rTzU6evJ5IApDjSazbUHfvblXqm78kvjV3kJosnq61m2qY5XbWMaJBlN32e8Q4KhhYW9m3gXLCAfjpsHylJzfzl612Kd690PQwcy1B6JQjqUwrBgVIp510LPjvhqRWfdq5YjGhmmxbZBXydcy8fB4WI5YBtbRH9AEZNiZp8jAzAAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"a2c/conv1/Relu\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"a2c/conv2/Relu\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"a2c/conv3/Relu\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"display: flex; flex-direction: row;\\\"><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              0<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAABUCAAAAAA5AE8dAAAX3ElEQVR4nD2W95tV1dmw9/M8a+162pwzfWAYhiIIghQFLKDYYteInxUblk9U8qlRohg1xkSUmIgCxoKVV6PElsRgJRghgvQ+lIEpzDDt9HN2WWvt8fsh1/XeP97X/QfcGhioMwJARJshAIDdiISAemNpKwAQHTyyhQHBEKdxi4FUSXQ+IuBbtN9jD/ELgfT4vYjIGkb9x0RCBFbWYIgwiQHjTx0/FZAxYEssRqhjV+AujNg+FkuJEqFIBbyLI5rITQYwpZDpEcePMjqOqHNi9eJ+WVK/wLqBJf5tTENfVV4Zw5RluA4DiDCb6QBgmQPurTN+kfLnV3F6SoMc8FeBIeAVmLmewH574HOGs4C2IQJHYKv0NyuOMSBGKQKtYoUazourz3eFzImGJyv2+mUplDp2ny/CMFSBn5Fquzm5Sr59X/iLcaq6/w/qy4CmlfvL7ZPdtFKH5MqgZPnprJeXMgzFxDPKRe0k3TdoOyB/Qmf/ejQPQHrlBH8dQ4yUy6ovmWDtk/QdVVC0qAPpISDWQsUkZ4jY5SywGBpUkT1mA6A1dEGzRQAsotlJHfzulLIYOp3Sm4yAq18WIk/WsGxbjwrj7m4hpAinP16AY2H3qiKi/rUn6jVAKfza2zjCiH6ZOZcAEjvzI9YYhN9pgKjxqw1l6tDEdgXbTc42wHHrig8j+pE702EYq5dHF3zypaqihaUSY7ESaHCtJwoaZqDZ1ekLAKwKOgKCpmkz3WJpTjXjGuEMpH2WRxFIOImVIxlgCv2lNgLcsHL0z7dysJs1pCbgMUI7tZGDBqz6oo8BAKhjvrMACA1fyhhYbHL5ZI4AqAGeBafteKWqa99qmX//7MeyNWfL7meCDmvOnOM68X2kewZDSB6QQxOsuuA//PHi2MKrrmxE4+gpdMaLsTeYY0yf/X1w7+r0Q0/tvM+rijCmmcEAWqNZ0/70El7XdltHtW7yucNuT//g8UURXbQuDiSv0GFFdSgRLSp44nD1Xfwa90/l6UmDQfz/rIzzOkY/pgMSsiFZJGd4oFEg0FM/9k67dcPGFWKHDBYXi5l7huSPfocWQ7e3GJYwlKXQl16C9Rvf3OFL/zlXKOEa/vjcp+VWkWtZPKSzmJaeksd+3GKEg6Fmq5BcYQwGKnRXBEJJKdX2DwJVUgsffNgMhS+BuQaEy6VMJGseUfm8kq6rhOenxFWv9sqyKIjWyv5gu1Sh+3xJTgnDOVqgBkipReqzUuj/OxC+5/uh8FUoQxUOqsHB0CQZVpflOYdkRklffXdLqC5Jiw8n1i4RIpBq1TQpr+1VQcaXsuCHqq2l2tTOSVaaosT0Pd3Je/VbopT8+0mlixueO6tq72r1nJgQnkWmNBkgEvBresxLdCtmMWuMRWRcufxZnkSkdN1nhMTsHy9/YWrbR4WCpSEgdC9fQJ6Ouh2tNWaNrbGpYuNztYT72YfmwQgSb2RdbCIAOIltJhEBJK4YFkVkdk+bYyA3WP23iFCLGO3cJsdy0DTQNJ0aJ9+MpDvEEMDSwWAEqDuAdzakkNBw3JPfB2BI/1lrIAGibhiAAGgZiAw1HicAA8GM2+3ciWja5QDcNrYAa3ZAjzNA4gjIABkiX/0XACT4roc0AABrpgnAGQ4vxAARyanQARDBvqMaABiLPGwjUIVGmQCSoT70nXyfikXmJWOnSSk40shpjaotwA1O9LdKBkueZN/6+eJvWL1RI8M9eorp21SoilGLnRiGchxL8IPZUI0lxDVhqGEggSm4rKveU6AnzHxRlScyYNtajDexCvipslTHEDKpxmOcEMwHtnd6CIjGQP63UR1GtWeHnAEIsZ4s8RMAAMqh1OJhSN46yuUPSrmQPTDfK7W/52T17vL+XNkPst0fydJy4Y1yi60iKAS8+ZeBEI858S3v7vaFVNnM8RXv9BaLb6775TV/mhAMfKRDp/hQGyXExtMkVsj9B6XKvr2o0Hu9CuXwWif5rlI/R4M3ZktqLUR+YQpZCH5fdewjFSrhndw4MhuE4hRGE10hHjUNHvGUUEsdMkfpmtkw+9Ye9W2DJzp6zyv5YnRmT/a4dL3VBb/fF73Ty8KNtJT7z3N9abT5QabQ0d+9Qaq7veL6E9we8evr6m+C+K0vmdtSLMZX9QplV6FGkUWmp0JRllWpmj6hxIFZZlm4qiylr0KRLQ6LWhcc+Hi4u28IVpWD+ftlBelC5I6cZvC//iGuN3Nj6PC5p9ebV7LWc2b7MmQEGiAio5DzqOFYnSpiGJ5Rb2UQaY31w9H3MMrT+pTDHkWrKsjuEmZ0DRl/EG14fzzDaNoSTNz/JMPaJ5BsnDmKWn1JcUODWoZIMrCK9vjJZjEy5bFcDX9XXj5DNyvs3kx63Wbrlq+PewOWTk3XlsQp5k11Y5ccKlXP/yg39ZanOg1zXOMpSCdS3VSgk+OLr+s2+GkaBC1AZethpu8z+XFvY6Q6wZyhtZWIGDFJn8dWRiy7OOQjw6p2zKKejKZYM1+yyKoaMXP3IvnpRGS6XNgZqEktrUWMjnVsPKVRA6WAKz3I5R/ZlsytX9t8021XzG01hq7uWTQ6Wmu+NvvUzFc/vFJRe+GXb3aZ1yTi9cFDT1814WaDuUsfr6k6Yz9e3mHiHCdu9J/1glisvmDk12kUhqSXMOgoyyuXyG3Pf9rrSiWHd9wRhL6SbcufeELJ4OiwlBAqWH2BuKAkvJKbLpfY/+0eKPGKK/Xc+tEVSSJ6TSl3rvSs+ZsiWu21gqiB/NG+sOw+UWZs6u+a0yeMpD3i8APCj491ho2Ytf57497ba++4Y+9Kw1i78L1/5KKXpW684+D2buE2/2DYVQAIEM9si9nNXxIjLYEWYYfpVwt/dWXjOzcYZqzoBvWfDN15ZqHoBv3nFHaJstvvH9jhl8sl75A/NxD+lieEPSfbl5PKFyrw1jxRlWSc5YrFBwM/UoUaYAzrS5kjLb/8rMb6OGvns/JIQbRbnlDdO0v+3qI68Hz83uOFoDtuR1nuP6LfzU65ep7br4oTvlBhGIi+ccuLnsk3YILc9/r9uqOgAXKtNVJ3j+eXzk/se5dVSZ+ldjVGUj/MIEtn1vijpmNzKy6eYWS9MGScyI3Vo/b2ozfIZxnxz4VJOkOGQLXwweQJ28s+b+Ia8LiGztKyUn55Uiab3NJ24K/FzaLx3TM/cH6+qNJeu/lYT0t/Qy7nVb97bOCGnnKh1qqwFzwlBpXPoEpanzl+0taZYR6Qm5htFEwyNMgLwD2TvIGBg03nby4eLbff7aWPSTFu9JSBkxrfufjfmd7W3//a+mR2dealgfy638WOFqZahrF5aqh2mpS4eXVhf4NFxtwfXBl02O8jQz2qQSEEEIbqD+pesM/180VO7qP5I1G7oqLGjI8mvqxuQ/RtXmc+pVTvqsvaNu1f9lRPF51YoYI3pyeGfN2Ql68/UzFL5Cc0iClR/xKMZl7QyFUAfRhmXPub+kuzfnacXi57nnx63nkVzDir0rnenFSz656VPPHsR59v7XnViaYeLufulueVv2/ZYxW7o+VQBMePyF7z3OyYxozLmcG0SHyNhuPx67XZDS9/8nB586N1Y8s3WRu8eqYPZ+zBlM5p3HU/lo8vqxlT+tOxX1U2jsgEUsrgofp1bQaOH1sRFPp9OyaeRjMTGdP9L4uQNEYAegpzlnir8noWobH8j0s5Rg2dT/7qf8b94ZxKjixye89Ldcg2OW3ew3GzLrez7BUyfr50c28gxc1E7ScyZGSpAVWYzJHZGgCDz6vkc7uCgn9n8+Hp/oNXFn+FJ8Zta+3KJGMOf+c5/bc2j5vobPl+Kp847xt3U2fp4t6LllZx80a3sNMgjbOj0VUm1rthj3UnHa/SALg2i7nndQfeecM31Eb37A38v3JEZmSIY+XNdtXoyinc4RSt8VsILtyae+SNnJ5Y9XZ80oCByCLEAUEnQEj+Sf37ugz7g6FBlLTaRtFXKkm3Mnh86YB4xTIqyMbIDD7H2Z81Lot9sfyea71goPhiFSY/bSnvObEJjceyqlRuB2LWBbMtIgM0DdIHqofedgJx0uCwD6w8Sha8yfsSOSFV61VD6kZ0uCl+fqqyR8i3OlubeLR3w6/b+iKMN21cVnGCXcf5vKxUkwhO2HjkFvJ/Hh+JaGVVGu9BwgM5DcoKahSF6129gAcKZeGcHahykI5gGtC6dMU3Hcy0J2yO5MSRG5y6ovePT0oHO6MTejyplo77bpn0DvWIy2zbuEZ46uxrFUcKqjSUAcaKPHwnE+9+J+9tewyjA+4P5pThwAAd6y/1NcxsGH7h0lxFzZCJU71OceOl8aGz8ofzciBx36Y29VKVVJ2PsrsmfnVcyZaeBkSdacmlo5kjoVDaEOsr9wnzFGpLu83EEVgMkOuEGKX5u84biez+J1c0JtumLv3N3f98aUft0qPy0/QC4XlKpaVUfseY0D2QVylA1IjQTmQNdaxww7vdq/dQjF3/LAGCRroOCAD8YoHGLbcsvGQ67ytvNOYe7BBK+aUrbDcfBGUve7sKi0ouFmlPbfLcIAvANEDT6v2mWGxXYeB1CsNf4Z9fR5S6QH42iiOS6cniz56JOtHXxsdPKRXx0owQ8tDhfcHu/EqlSqUjm/p4PFBBXmUzV8t8WuKYqAYQpVejpe9HDQRK/vhOKRAyGD+vFG4Xwjue77t80V/ln/9cfu0l68pXXT/r91T/6vizy/oeScsEY4gEaDWZAKMCt1c9QUPnFbJw+lYNOKFz6r501ZhlK/1fxzOVFfnct7YTDNtQPBex2ttr6CYmCzcyXtGSuHq/ktcvT7DdN5WLvjVkuCypTqu3hyOzoyYd+LJxa0nyed0ajssBEy9m9j9J+hV/HP6W+mZ8cf15ZDAqLRup601JpD9O+8uQoHDCY/6FRvLOibbFhtVmZSBaBhL6VdgbKpVevyv2WuQilYnUslhDukXDUQEMFTxw36bGUYHwfe9lT4Re+96tSohZe5qYU1Ar6WzFmh1WOWlWJFdz0ivirGET+l8O0h0RhyiiQgcIrZay65HOmCdiGj1rgEm4JnsD27tiIJAl6fqekCXDntI/Heh0mFN+XqcNnSx+UkM9G2raDpoOM/XE79cb8y7O5u9CY+TvoteNfvPjUk4OaY/ALyeSZusEjAEZBOmS23f296LruHvfuRbiqV9zMGxg3Jlu1Px4cKlFlYgECJTUF1iIwKJOMIDITL86MTl5YL6zmdXdCIiokUVI71SaqesuXntgu6p/yC0O73PYCuf2EQscJ9uZy21mNvEnc7mXPoiNysTZm0d+8ZvElTMm3js1mg7kDiuSqdBfEW89cP9sg7si93ck1IDuoq0XrqiqyymZLRcit+8Ugbhto3v0ZxmGePmZOpms9rURZ7sqFFHSObnFMWm3zZ+pvOJAMgxF5nDEvKj6TSnazO3pUqAOyzoNyB/+fnSgpxCG0pddpEdFGGahFs3MXqBaQkrO6r6JhmVFGM69s/tQq1KB++rh9hopS7uFDLqVdA94RSFK/j9f/GrHtNejna9oFDt6yrEZJzKj2wvcyHcnE/y5tbdpKKdRZQ81IAYIQNg0sDN9U99BnRATxfKGCCMa9VT7/mtOZCxVu2zPLZckzi6uj507Zdvjw5iurTDm1d17rNaqTE34+BuDEx9RaV1y2pnf+yK34xkEQECjyhxyx/LCup6gEfMLjHj/wftZJGIZD3w+QHUPPrmmz0ty+5WzZv/Y/qvfZ9ob6S1tfmsolNyigm/DYPl9J8wPjrTnFuGDiN+pYlYe1405Rfc1Q+9SgRDpkf9wi+V2tz814vWevJ/3qyL3eT/m1mYuX1g3UHwvH5D/y41u77Paq+XQKIm8/1ZRyRn2rYkPV3UIg7xXqBTqCGCcqOsAgI+sVara+s+M8xYG7c8/Fblcrxho27+4Zgyv/Gj7765O2Ib15jqz1ulj6G2MageFQsbPDPLlIJJkquXh3TJs/VuYq7/JMNJoF/RSm7HftEcMKDk8bo6edvCC3miEV8QaVr6XGMfMHf86d2517nn7d27p2LCOsarQd+BvpPneFnZ03h1SefaqI9Y7kcARYclz5YUVnbgIIHHyyPGrrGjF/R+MSYz4R+3uIX0vR2cvNq98pXDTuruEHT2w8awj0Sf1ia2v3muylduDkbvqm7lGFvIMhyrPn3V9A7d53MStbvln3ci6yNBZzByHvZ9Hztmy6em8W0Xjsab6ZccgnWLcdE5mhHptU8wkbnId0WEx89PY6fM0jpQ+DLb9hgh2G59v1OPXbTvV0J2SRUkyEREMZgCkkjCkkRie8TjDW03EqkRKb/lBr5lfxa1e/3Irf+TVfl/s1v/uBguyIzRAGBeh6PP5T2TAoE58aOYbDUCZYb1zE2QjIGcIBqVG/TOiY/fjhhXcRUBF540wSeicO7Rf6baRETkZdhgAURMZaihWw7DCMuEKUWnfd2RJcpTbF7OmdkuZLgT7ArdLyZy0m7dvTo/AM24dCK5eqJgeqf3bfFcwZv7TO6bU7n3/udETIsx1bektp4vC13DKHIjkwcYheQuHO1GsPHgmWXa5GB5me/k26fpRBIQYdxgzqm8f2lroyk1ujrW8Vcz9a0ads/Uvfr5vGsL/e37SGzUWdwrV69strVpmUYbR8Iyqk+MGo9m8ZHoym5eh6iqHH8lQ0I7Srl50j91W6Ct6KvTfpq7i/6xTfrrHL7l+KIQrhfRD9cwxEZz9usr7gdRyoZKDg2owCAKVO6dr0A+71GAYDIbh4OBgODgYShmGameowjAcDAf/6wfDwf/lf8MwFH1iMBwMQyz11eHgTxDeLMYmqg6fGCSrh9p5GariT+s8qQ3+1DPQEl7U8ImcsDNeqAhD9f745rbaji53f8+YvcN+CuUOb6KQP/30U6jly05DbjQrlMoaAnq+Op0snno6Epw33rIRqIIlGQLE7SmckEbUuwHjiy/KOWJqIyIDiujEkEdANwkRUWdUg5g6CeKHGDytmxonAsJq8zLkZIDePQ4RSUPLwTgCMKYTI3S8CTekDMZp6A2NaAMC5yZEEIA5DpqIGjoMx+omLmU6AGltqiLBkJ1O+pMmAiUQATRADgCgATsd0GDE9JeQTzEB2d08EjcAMAWIoGlo/7dDBoABAgCAM1NjnRLRAX5nfaAQqDKxYl+gA8Yp1b95PSdCvV9tQ9LZjH6RAEAa5SsCYGh+spMhEMU/7+eIHCOFYAci4EwlNZQSfV8zgkI4qANGg1ANegh8ugpDSTB/lwjDrQybW5XwTwZIrRwcHFQchgsVhkEKqByGofqAbSqoMJTP1jGmQqV5oZThXyJC/Eaq8gvOJa6Sykt7VbfkA6GO04fDqoXyymRcuFaG6vRZ3+jpQLqVFHEOKVUcB/rY1kDM7LMTi1845Ps2EvD4Ok2kIq5ne4cYbDn0w1060mktA+gwRIonv5iEBFBpj1jGEQBTZsdQQsCU+WyMEHWLTyADQU9aowgRGbdMZIjENWtXGCr1hnN7jfK+fBn0TQNre9trL39JfBZ8lTNWOR4/Fh0x/OqZCXZjZlfTFZ9Le73o/qCqsly1c+W7DxhXB6e4nzbFhlxUnlTzqz5ev98FnTQRDgahUq762o+8uLtbhaGYIy4V4aD8AZxR3S/7XTpgU+vWg10zKXmrCkL/K/bh6D8LFTgwdvp+GcqxZqtVCEKZYtGoF6hKBppUoiAC8fFdk0aefFVrYc1U2RB/v/Ke/KenIkv8o5o5ExCAEdEkBiwygi74hhvnzI1Oq78ZoGqs0Tv/VeQGiyyJTwAkZukFRNLKovBEtMcNioC8tlpP2EZ9eXTiWP4La4hB+iNdC5zY90T8yIvM1hGNyiOcUAPr3AO6XYfY0NcdNS+1Ggtu/ue9AQJFMoC2ZuV7aJjJdZOYbaeOcmZQBWEzBwQEuJshAgEMIAMAIh3/uwI6AoJNMIUASSd2b4qBFUMtCoRrz9eA9/HkuAIxa53X48lZTiTV1FN6pEmPvJ4b2/w6x0dnX3Hrt9sI9U63q5oTN9bsHhrlHKueueTGtx42GCUPLG7IUrJ2YOZ3d3RqwFRRM3buN2ev2YhsguxKpp8zK+5xOTJAPOvbU9lkA81WN6lHY8Yprnw+YizPp0vKNYby4eeXvWZiZMae2XUmAw580kscOSJvEuz/A7oo8UVsftFrAAAAAElFTkSuQmCC\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              1<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              2<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div><div style=\\\"margin-right:10px;\\\">\\n\",\n       \"              3<br/>\\n\",\n       \"              <img src=\\\"data:image/PNG;base64,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\\\" style=\\\"margin-top:4px;\\\">\\n\",\n       \"            </div></div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"timestep = 500\\n\",\n    \"import numpy as np\\n\",\n    \"from lucid.misc.io import load, save, show\\n\",\n    \"from lucid.misc.io.showing import images\\n\",\n    \"# show original frames\\n\",\n    \"print(\\\"frames\\\")\\n\",\n    \"show(frames_float[timestep-4:timestep])\\n\",\n    \"\\n\",\n    \"# show observations\\n\",\n    \"print(\\\"pre-processed frames\\\")\\n\",\n    \"img = observations[timestep]\\n\",\n    \"images(np.transpose(img, (2,0,1)))\\n\",\n    \"\\n\",\n    \"# show caricatures\\n\",\n    \"for layer in m.layers[:-2]:\\n\",\n    \"  layer_name = layer['name']\\n\",\n    \"  print(layer_name)\\n\",\n    \"  \\n\",\n    \"  with tf.Graph().as_default(), tf.Session() as sess:\\n\",\n    \"\\n\",\n    \"    objective = dot_compare(layer_name, cossim_pow=1.0)\\n\",\n    \"\\n\",\n    \"    t_input = tf.placeholder(tf.float32, img.shape)\\n\",\n    \"    param_f = synthetic_inputs.image([1,84,84,4])\\n\",\n    \"    param_f = tf.stack([param_f[0], t_input])\\n\",\n    \"\\n\",\n    \"    transforms = [\\n\",\n    \"      transform.pad(2, mode='constant', constant_value=.5),\\n\",\n    \"      transform.jitter(2),\\n\",\n    \"      #transform.jitter(0),\\n\",\n    \"    ]\\n\",\n    \"\\n\",\n    \"    T = render.make_vis_T(m, objective, param_f, transforms=transforms)\\n\",\n    \"    loss, vis_op, t_image = T(\\\"loss\\\"), T(\\\"vis_op\\\"), T(\\\"input\\\")\\n\",\n    \"\\n\",\n    \"    tf.global_variables_initializer().run()\\n\",\n    \"    for i in range(512): _ = sess.run([vis_op], {t_input: img})\\n\",\n    \"\\n\",\n    \"    result = t_image.eval(feed_dict={t_input: img})[0]\\n\",\n    \"    images(np.transpose(result, (2,0,1)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This gives a sense of what information DNNs are preserving as networks get deeper\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Look at particular neuron\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_2\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import tensorflow as tf\\n\",\n    \"import gym\\n\",\n    \"import pylab\\n\",\n    \"import lucid\\n\",\n    \"import atari_zoo\\n\",\n    \"from atari_zoo import MakeAtariModel\\n\",\n    \"\\n\",\n    \"def dope_image(shape, add_noise=False):\\n\",\n    \"  if add_noise:\\n\",\n    \"    raw_frames = lucid.optvis.param.spatial.naive(shape, sd=0.5)\\n\",\n    \"  else:\\n\",\n    \"    raw_frames = lucid.optvis.param.spatial.naive(shape)\\n\",\n    \"  processed_frames = tf.nn.sigmoid(raw_frames)\\n\",\n    \"  return processed_frames\\n\",\n    \"\\n\",\n    \"#do simple output neuron visualization (Q-value of action X)\\n\",\n    \"tf.reset_default_graph()\\n\",\n    \"algo = 'apex'\\n\",\n    \"env = 'SeaquestNoFrameskip-v4'\\n\",\n    \"run_id = 2\\n\",\n    \"m = MakeAtariModel(algo,env,run_id,local=False)()\\n\",\n    \"#load in model\\n\",\n    \"m.load_graphdef()\\n\",\n    \"#m.import_graph()\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"deepq/q_func/convnet/Conv_2/Relu\\n\",\n      \"1024 [0.00784419]\\n\",\n      \"01: Direction_Cossim [..., ..., NHWC]:    0.01\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<img src=\\\"data:image/PNG;base64,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\\\">\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"0.00583659 0.11390039\\n\",\n      \"0.005510316 0.4873783\\n\",\n      \"0.0033509536 0.9695292\\n\",\n      \"0.0023913395 0.94546115\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 432x288 with 0 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAsMAAAC0CAYAAABxNCESAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvW2MZNd5Hvicqurq7vnmUBxy+E1R/BD1EcmWvZKcBLbXBpKsszYSI9gFYuwGSYT8WCO73o1jJAiyv4IssNndAMnGEBwHgrGJHMsB7CwCr+xkBa+dmLIoRVRISiJNcsQhORzO9Hz19GdV3f3R89x66r3vOXVvVXV31fR5/lT3veeer/uec8953o8TiqJARkZGRkZGRkZGxlFE67ArkJGRkZGRkZGRkXFYyIvhjIyMjIyMjIyMI4u8GM7IyMjIyMjIyDiyyIvhjIyMjIyMjIyMI4u8GM7IyMjIyMjIyDiyyIvhjIyMjIyMjIyMI4u8GM7IyMjIyMjIyDiymGoxHEL4UyGE74QQXgsh/MKsKpWRsd/IspuxqMiym7GIyHKbMc8Ikx66EUJoA/gugB8HcBHAHwL4r4uieHl21cvImD2y7GYsKrLsZiwistxmzDs6Uzz7gwBeK4ridQAIIXwRwE8CiAp3CGEuj7sLIRx2FfYVk7Zvv04nnDbfoiimfWF3jew2wbzI+azrsd/tUnmNyW5dmT5o2Z1Wbg9KZrQc/t1ut8v/p53DYr/273H5HCSalrnPdbxSFMV9UzzfeM5tt9tFp7O3RGny/qfth8FggMFgcGDl7VdeHrx+PIi+nUW7JpkDiqKoPedOsxh+CMBb8v9FAP+ZTRRC+ByAz/F/TnAHjVRHzmrC9ybtOnnv9wdnPxbDd4SsUfo66cah1+tN/Kxg7mV3P2TCW3B41ybNc5bPeOMoNrb0Xt321JFV+zsYDEr548fSW1zFcFCya+WWC4pJME5mUumb3NfrKysrAICTJ08CAJaWlso2eGOQfW/z7vf75b3t7W0AwM7ODoC999fv98u/+Rub04qiqLxzm8arQ2rx4cmMXrMLsnH3YvUbhzrjsd/vX2iUaRWN59xOp4OHH364dh2JVD/F0un/29vbuH379tjn9bmU3DR5H5M+p0jJnP1ttVpotVrR57x6ETpuYmXXnR9T91Pzzji52N3dTd5XTLMYroWiKD4P4PPA3cGueZh2tzWvCCEcCiMyLzgKsrtIiC166kKfm0SuF2VMH4bc7ufmrdVqJTeidRbndT744+oSW8TWzTO1UJ7lPJtabM87VHZXVlaKOn1r54VZkj913pGXpm4d6shSnffYVAY5HpaWlsqx1e12AfgbAD7HxWW73S43loQy6rbO7Xa73NAyD25GQwglUTDuHewnplkMvw3gEfn/4TvXMuYEsxCiOh8AbwKY84k4y67BvCz0JmGAdKHESb7ValUmdZVlpvPSMJ1O1nOEhZXdSVnjbreLs2fPAgBWV1cBAMvLywCA48ePJ/Pk+7169SqAoczcvn27/ACvr68D2PtIqxZgXJ7KOlGeKItkt72FPOVK68O8tre3y/usn8ot029ublbSsA5NFmQHOE83lluPHfUWvOxfqwFhf3gYDAYjc4X+ttttt++4WHzooYcq+V+4cKGss2J9fb18V169+Pe1a9fKegF7Ggy7QBwnm7bOXr9wvKgJEv/mr+ZvZZDjrigKLC0tlXWN1YF56XW2WccP66hjI5Yn4bHU02wEp4km8YcAngohPBFC6AL4rwD85hT5ZWQcFLLsZiwqsuxmLCKy3GbMNSZmhoui6IUQ/jsA/w+ANoBfLoripZnVbAHRlEGaM8YpiaY7rnlW1WXZnR7TqAYnQVEUFZnybIY91sUyK+12u/zbsr9qGmTL0zpYHJRJ0d0mu947JNif3W63vGeZ4W63G2UAlVk8ceIEAGBra6uSv9Yl9Q4tI0dmTEGGi/eUsSWUgbNq5U6nU9o3a734SzbNY0hj47DVajWybfdk3GPsmmAaudX6fOADHwAwZN5Pnz5d9idZzyeffLKsM+vNfrt58yaAPTbzxo0bI+Uw7blz58o8yYz2+/0KS0q0Wi0888wzAIA33ngDwFBW7rnnnlIWPC0Uy6TcsAw1X7AyooxqHVtb75rKpHVSVK2ZZdtZXq/XK9OpeUWKybcypOU18T/SeZ3pvDlAx0sdTGUzXBTFvwHwb6bJIyPjMJBlN2NRkWU3YxGR5TZjnrHvDnRHCSnmKJaemBWrdljORRazcgw4ajhMbcEkZceihNTxTJ5lWz22hrBez15UB49B8Gz0FlVmm85NhyGHMQezwWBQMrueTS6ZKYulpaWSjSIjyDw7nU4pI4wcoBEZCI9RtTLgsVKsZ8putdPpVGSz1WpVolx4tuuWsev3+2WZqfpZlnGRtJNAlb1stVqlloAywf+BoSaAfagMvLUVpoy1Wq0oW6pgf/f7/TL9sWPHRp7r9XqlNsPOO4PBoEx35syZkTStVqu0ZddrAHD+/PmKpuPGjRtYW1sbSW+1CFpn9lWn0yn7RCOtsDw7ZzIvHVuaXtsGpLVqnhbPMuRapqc5imnxmoTGK+vQ+ImMjIyMjIyMjIyMuwRHghlO2fll7MHbuY2LdbioLFlGc6RswTw5iO3YPdtQL98699R+zbKDauPnsX3KOmpeHju46KhjLxrr25RGp6nduDJhHgvMa9YLvtPp4NSpUwCAxx57DMDQPvSjH/1o5d2/9957AIBvfetbUVtXZaXUftyyaso0kXG0sqO2lZZt1HZoP3h9wHuWcdN0luHU9sRsMvdDA3nY0LZameJ7GgwG2NjYADBkPS9evAhgNHLIrVu3Ks+TOSXzurW1Vb4PZYRZzvnz5wGgwgJvbm6WsmujirRarTI9wfKuXr1a5sG6K6ttZX5zc7O8ZuVtd3e3vMa+YQzvmzdvlvf4POv0/vvvl220mo7Nzc0KY91qtUp7d2vL22q1KiHVCP2GeFq7mD3xrGX5SCyGFdqBqZAdk9yb5uVM+oGxZU9jjuAJXcrcYVq1euwDfBQxC/OWafNqgnHvyi7A6i6q6uTpyY2dYPXABc8RrqnjiX0utdBYRDmuU2ev/6cdw/o8P5xc6J4+fRoAcO+995aHL/Aay6F6Gahuen7t136tXFykzGB0MRyrf7fbLRdIXt0Jm0bz8xw6bfisXq9XqYM1l9CydeHjOfQRNiasbjwmPaxjv9Hv90vVP2HNXYBq21Kbc++efY/Ly8vl4o95q/x4Ms9FIGWXcrezs1PKLt8PQ62FEEqHQL4DbuRUjrigJ95++2288847I+1R2bUbAAXz5QZga2urYoZz6dKlMm+7CGZadUTVGN528Zz6PulG01s8A+nFsRIXTYk8D9lMIiMjIyMjIyMj48giHORuMIRQHMZxzKqCq7NTqeP8EyvH+7tOXpMyZ/ZkpVQ+ddk8/T/2jKo2rHOB3vNYjiYslMUd5uTAdX37KbspufHupUwNmr5jzXuSPOua19QJ8xNrq61HSotSR7bGOYum8qjjYOXlE8LeKUuDweBAZXc/5NZzKqqjoVBZ8d69DZF17tw5AHuOTTx0wyuDql+yVVSFv/baa1GzAq9+aqJg0+j4sCGllpaWKkdIezJmmdutra0K66djx7LZasZRJ9SZvnfLoOk3z8qw5/S0vr7+QlEUnxpb6AzRarUKq/JPfecsvO++Z65Vx5zE0z5585U18Wm326Wc8B7lQJ3/+DxluNfrlQwyWWdruqPwxriaTdg2ari32OlvOtdZ2d3d3a0wyipLdoyEEMp2eGMyxgx72hprpuTVndfumLfUmnMzM5yRkZGRkZGRkXFkceRshhUxFu6gnAzqllOHGdZjEmM7PI8FIMbZ2Fg2LoTq8Z+xwNdah7pYZPvLcbBylnq/nk1l6pl2uz1y7jwwalfI/mQ4qdR78d5BU/vzlNalqb2zZeZUlsk2eI5RhB47qrZ2Xr1jdbEynmLo7hZnpUkwybtl3zOkFFlTZfGsgw7ga6ZsGq+8lBYmlrfmqzaPZPSsY9P29nZpu2nv7e7uluyfdcBTqP2ltd1UObZ2xMpcM5090EM1dfM216a+SU39DVK27XXkQFnyJv2kB0pQDvgbQhiRcc1bnU3rlKcMqp0f72ikRtKTZVZm2NoH6xix/a1zKOF9q7QOlFkvdGDqfXqaQ83bSzsJMjOckZGRkZGRkZFxZHGkmWGLpmyGh5RdYyxtrNzYMZ7AqE0SMBrShTsu7kD1Obsr8xgWZR3q7Ertzq0oipEjHW05dXZ4sbR3E9s2aVtarVaFJfV28ylb3iY27XWZa71mryu7xXx5jVoNtW2z7drd3a14R2tQ+diBAwrLVmj9ta32GFRNaw9JOIpQdmhSGU7Za1qk7FpVnjxYr3b9VRaOsLaRnlx5dfG87G1bCS3PHu7gpfeuW2977SMrm6oZsmHBdnZ2KiGy9Pl5n289nwVFTAun39fYse36tx5AYfPWPOz/3lHDsWf0mmqcPBmx9uQpTYeG3fM0vFZ7qxoGexiGauBSvgg2z52dHVcrob+2jcQkGotJ5PbILYabqlcsPMcI735TRx5PkGOLmhBCRa2mIUhiTnU6wDwVR5MQO97gm1TdVvddzJsa76AwqTmBp86NqbbGqQFji1vv1KEUiqKoOJSoWjdVBy5U7GIaGJp9eHXmrzqUcGK2HwBvw+D1kS1jEWWzzrjz5ijv40xMo3JPPWM38ePqav+PmVIAo3LkjZlY/row4D2aPWh+dv71viHeKV52YRRCcFXMzMfWnXUZDAalU6I1ofJO71O1Pvvm+vXrlXSHgUk36HXuaZrYHABUTVQ0vWd+pSYJAEYcRe2i1m5W9DkvjJi3qLX1VPm0ocq8xbqeOqcxm/W3KIrKRnF3d7dSRw1NF3M+1r+brptS15oim0lkZGRkZGRkZGQcWRw5ZthDU1W8vZ9y2mmijm5yP7abq1t2anfl7Ty98sgQNVEZe2rNGAOu5Y5Thy4ymu5qlcmKMbbevVarVe7UPaYs9h5VJWbZXGCUSQDSjprtdrvMg6yUslNWrc08VWXnsbm8RjV1q9UaCWGkdSmKojQrUjMMlsPwWGTT2Ge9Xq+sD5kyZe1S7MZhqpvHqd1VZezds6ijAq5rYqWq3NTcGTOrSGnQWq1WRc3rvSOPXbMq3VQ5Ohd62jLLqKscezJtWUmtM2XanpSn+fJXx6zV5CgDmSpvXufc2PsD/AMfUvJsTWM8LWlRFGVfW0bU+zYpgx9jRNfX16PmP3WRaqOeOsc6sK2pkIOets/OD4PBoOwHDfdnT/30NCvTatS132Na8JjTXQqZGc7IyMjIyMjIyDiyOBLMcMp5qy6856wBeYpFAaoM6jhGNWUfZYOve0ydZ2Nkd7ye/dq4a7YOKUzraHSYjJrFQRnyjytf2SaPDbBB1D37SMui2OD2gH+8q8d8WbY55oDCX7XdTbXR/toQQJ7TG9ncpaWlio2mxz4wPeu0srJSqRf/39raqgTO53Pb29tT2cvuFzzWd1x6+5tif72/+b/H9Mbk1qunsqapAw9i9p0rKyvl33rIADA6d6nNo81f50vLNqlG48SJEwB8meaBHDbk2fb2dslAa32sQ5tqSdgPnjOSZcVYzokTJyphrbx3570Trz3zDs+Z2GMQLZPO/ur1ei5LTvBvfWcxVlbHj2d3m/o+emOK9WWd9dhmarS8PJnO2jTrvOppPOy3RBlvymBKo6xztefrYdtpNXWen4a3nvOc+Jt+ezMznJGRkZGRkZGRcWQxd9u+cfYk+8kU1vVSTNkfNTn61AujQng7KY8NIdRWxzIsnmc0kQp9lmK4JmW/xvVxahe4iEhpJfR9pLzd60BlqY5tlg3Nt7S0FGUQV1dXS1tc5kmmbXNzs8xLZdAycjouTp8+7bZxa2urYius7UuxxvR6ZnkhhAobcuPGjZH89J62ne2xXuBqc237T+tsPf5T88U8IGWr78lQ3YNG7LPq1W4ZHY9JToV/9L4Jlo1qt9uVOc/aEOtzejiFhqokrK2751lvURRFOXZY5s2bNwH40X1UDm2kAW0ry0ux2cx/c3OzYjPqzbmWBV6UudfatapGyGqRNK2VG9vfmpeypHXsba18e/B8K+r4G3gyPxgMysNqTp06BWB0bqcM8h7rdeXKlehhGBrK0gsrl5o3bN31kA7LyCvTzfTUtGi9rN9Kv98v62j7z7PVHocDXwxPMsBSKp3UYqOp2r9ufWN5aNzNOkbiXrs8xxCvXO/ELaaJnTbjIbUQTdV5XL/EFgDjNjSp9zOvi4mmSPWdhfd+xo0H/u1N2jH5TJ1t3+v1Ks6SGt+a8uWZBLEcqvAeeuihUr127Nixkbw2NzfLvPh76dKlkfy0XQq7SPAWt/zd3t6ufKz4sdje3i4/ehr/GBiejKbXiJTJAK/Ny+LCjqPUePUwaTs6nU407q8X9s87ec0z/eK7sBuvwWBQ2STx/3a7XXkuhFDKAeWPi2Ka02jZ165dAzBqvkB4qmcbg1jncTVJYr1snPh+v1+J92r/1zJ1MUxwI8rnrl+/XrZRVe6AH1v3IKFymZK5mOyqiYJnCuLNFcBef6vjLp+PkRkptb3GTo+RXt49b8Gr9bSbGl3c27Z6JpTM68yZM+U1nobHMJX6/m0/9vt915HZ9oN3z35D1HTu7NmzAIbfhhBCORbZZtZva2urYsbBb4sNcVgH2UwiIyMjIyMjIyPjyGLuzCTqogm7Fnt+WqbRCzuSUoVr2TE0ZWbq5F/n1KxxDPG4etRNkwpDl6rXvLBq0yDF/tbRWHjsr1X/aV6eut6yIEyzu7tbcZizjjxaB6btdDol86DMkmWlea/VapV/2zTKHPIe67C2thZ12FSWh8zfqVOnynytiUer1arkRWZC+4Asg7aBf5NFSbE+8yK7HmMGDBmjY8eORVWlymin1MMpDZD2rcoBMKqRsAyVyi3fi546aO8RKadQPnfs2DF88pOfBDBkfU+ePIn77rsPAPDss8+W14A9tS2fJetEuXrppZfw2muvAQC++c1vAgD+6I/+qGyDlTVtl1VJd7vdipOf9hWvabg/YO/dUF5TZiy3bt2K9on9v4nj5X6hidlhikkl1Mwr5sjrfaPUZMBqoTS0njVt1LB2dtwUReFqdsdBw0xyPO3s7JRyfP/99wMYHXf33HPPSFspN7dv3y7T0YTi4sWLAPbmUuuoaZlYtn8cvFMXaQqhmkeOfULncTLCOi7YfjsuvL4dh8OX9oyMjIyMjIyMjIxDwsIyw9MiZcPnGbbrPQvvCEWLlGNJzO7Z2uukGOhU/nUx7XOpOqQcXsbZxR51eAHEbZ97R7Z69sQxu8yiKCqsm0KZYGDI0G1ubpbp1WGNrBmZWuL48eOlrSXTK9NiHdT4/zj2wWo/9Hhmb7xZW0s+p+GyrOZnc3NzhMXW55WR9xBzODkM2Hq0Wq3SVs8ycevr65U+VWaT75e2qHyn/F/T37x5M3oAQa/XK1koa7saQqiE7/Ocz6wDmb4Ty7beuHGjwoh97GMfK50s2dYzZ84A2JML61xHPP3003j//fdH6s7yrl69Wo4Fzy6UYL+r9sHKU7/fr8Xgp5DyxbD3Ut+zg8K4MePZuyszbO2C+T47nU7JoFo2FwAuX74MYOgnsLS0NBLuy9bBMrXKDFunTbUdj4U102vWcUzL47x8//3349577x1JR6Z4dXUVr7/+OgBUfDJ2dnYqB2VwXLRarZK9ZT8w7c2bNyvP8Rn9Ve2TtftXO3yC6dmWBx54oKwD+43tu3z5Mr73ve+NXLNrpCZzbmaGMzIyMjIyMjIyjizuKmY4xkZ694DZ7Xztbt2WPQ517ZeVharDrnoMYYoNn5a58hgNj+n1QsWNw7ywavsN24caksaTZ8+LPfWOLbiT1ggLFipvXkgx3lMvZN4no3f16lUAewwD2RPu+G3IKgB46623RvI+duxYyQx4LLFlHXZ3dyuyp6yuHRtkJTW8m7U9VNbB2s5N6wdwkPDqTIbX2mqrPa5ljU+cOIEnn3xy5Hm+26WlJXzmM58BMGTj1Ob17/ydvwNgNLSax4ABo/aahGfXWYf1VKaYdr5s8wsvvFAy2qzzxz/+cQDAn//zfx7nz5+v5AHs2bNTdt944w0AQ3nf3t52ow7wfztXb21tVcL+efKeaussNXyHiXa7XdpsE/aI9X6/X0Ye8MLo6SE8zJPwDqzic0yn0QlsaDWtJ9M/8MADAIAPfOADAIAnnngC7733HoDhnMZ5bGtrqwyzR+i8b4/4ZjvPnTuH5557rvwb2JvvHn74YQAoy1tbWyvv2flRtTy8Rw0JWdlHH320rKu12V9bWyvL4dH0vV6vHAfe0dWcI5gn7df1kBOOdUYRevnllyty7YXwtP03iQyHg1RHhxCKWRvl1/0IzcsAB+o5SU2T10GbGDQpL4RQGeSxdJq3OkMNBoMDf5n7Ibsm/5FfQmMwes4kdoKo+y4mNVGx6jldKFuTCE1n6wkM1c029BkwjMXK9Lu7u5X4qYR+BD1nFdun3kJeVexe+C62PaVSjjmaqez2+/0Dld1Wq1V4JwneuQdgb1HLj7hdBHhxbPnck08+ib/39/4eAODBBx8EMBq6zFNdsm9pjvCLv/iLAIDvfve7eOGFF0bSqEOddazRdx6bR7xwfOOcAO371bkqNv6Xl5dHwgNq2Rp2rY55XGo8puZ6lb9U/t7/sXt6fWdn54WiKD5VqcA+4r777it+6qd+CsBQDrn54qLr9ddfL+/RtEHfu26wAT/MGKGOvZS3P/iDPwBQjl33ueXlZTzyyCMAho6Xn/70pwHsLe44l3ERSOfKS5culXVmG3RusyQBF9hPPfVUZc7d3t4uF/40Q+Ni+MKFC5U2q0xyrNvxurKyUvYJF+K6WKfpBJ/XTas17VMTM7u5VeKC0I2g3TDatmg5Ore3Wi1sbm7WnnPHft1DCI+EEP7fEMLLIYSXQgh//c71syGE3w4hvHrn9546BWZkHBSy7GYsIrLcZiwqsuxmLCrqmEn0APyPRVF8PYRwEsALIYTfBvDfAvi3RVH8/RDCLwD4BQB/c/+qevc4Vdmd/iSs9WH1haeqr8PwKrsZM5PQ/60z14TtnRvZHQfLIipTaR08UuYuHlTNH1Pr15VB+1yMLWN+ZHaVdbDOTBrg3lOF2TxtwHmtU4oht+pnr13ePXvgiOalDIg9Kclje2pipnIbkxXW6+bNmyWjaU1XlpaWKqHL2O/dbrdy4Mo4ObLvjOra999/v2SabH9pnnXCROq7nJUpXCok5Pb2doX1ijHPsf89rY+nHUuZfaRgWT9vDrbjY8K+m5ns0szh8ccfL9v3oQ99CMBQTn/wB3+wHPNkKMnE7u7ujoSOBIamChsbGyNmLsBo2DGyqyn2nuk/+tGPls54f/pP/2kAKE1qTp48WYYqY/1Y32vXrkXntN3d3TI96/n2228D2At9xnel2jiOYY4jT6ZSJl+2nbdv366w06wnmWLveU3HOnkno6r5UEyux2kwUt/BpmuGscxwURTvFkXx9Tt/3wLwCoCHAPwkgC/cSfYFAD/VqOSMjH1Glt2MRUSW24xFRZbdjEVFIwe6EMLjAD4J4HkA9xdF8e6dW5cA3D+rSs2K9fQcxyZhYQ8DXp33kw2uyzZ6bLbHMsb62WN56uQ5LQ5KdmcN7QcvnNSkedVh8/W5lE2XDTifYkn5jP4ybw05ZJnlVHtCCCMsQ6zOXns8RtheI0MTwvCAB69ellGbxVG2ByG3RVGMhEwCRhlEq93h/88991yFjdOwTJZB0znm537u5wAAf/iHfwhgj6nTfrb1s3+n5kSdT+qwnSn2L8VMeXbwqtEZB08+9RpljX2qTJ8NPbizs1M+S9tRDaNlGWtvnMTC3k2KWchuuONjYmVPGU47Fmnn+uCDD1ZYSNocnz59umI/SwcyDaP3j//xPwawp7mwTO1TTz0FYO8IYdaHtsZ0Krt06VLpKMbwe2R49ThhW5ednZ3ymj38RzV8Ou9ZJzkdKzGt2O7ubnRMaSg/e/jG+vp6xdej1WqVc7g9FIZl6TVv3HmaR/ud8LSFKUa5LmovhkMIJwD8OoD/viiKm2bhUoQQ3JETQvgcgM81rtkM4X386uKgFs/jJkb932vPpPVMTfZeOh1U9mOXUjUTqrq0apxZtsvUfWFlV1FHbempnCZFaqHBe/qh8p6zHttFUY3h7clN6tx7+2EsiqJ0xtOIFjE51OvW4U772IsCEHsH+yG7Bym39h14kWts27/85S/jy1/+cjKfGGzfqKOo/XBrHWxMd40YYBenuiC3CybPsU0XFHa+89rkkS12LHix4XXeVHUzsLcQ40KCiwe2T73uPdmMbWi8seDN+3VOVK2LWcjuyZMnURQFLl++XEZN4GKTfXPixIlyzFMlz3vdbrdsi41TXRRF2a+sGyOBDAaD0rGNC+tut1uJtPLqq68C2Fvc2sUw5XRtbS1qMqamA4SOMbto9Bx7PQLJm/91vCh0M+G96xhh1e/3y7y0ntY0TPs7tujWNYG38Y7JrrdJ9tLVRS33+BDCEvYE+/8qiuJf3bn8Xgjh/J375wFc9p4tiuLzRVF8qjhgT9SMDCDLbsZiYlZyuyiasIy7B7OSXXu4SUbGfmIsMxz2ZtN/CuCVoij+N7n1mwD+GwB//87vb+xLDY8AJvlgpViKScpOmTZ46b1wTd7O1Yt1bHeUqXLH7f7G1PWul90UG0Ck2IO6fWrTec5kHivo3bN5KRsSY15VPvk8WbXl5eWSeSbbo/Fdvd9YOe12u5aK2xt/M2SED1RuPfnQOK6x9mg/eapZm2dK1pTF1WvMy4Zj5P+rq6ulHHgaCs4x1kxgaWmpwsDG6s+86axkGWivXXWdz5TFBkZDeNlyer1eRZNhVc9eG/r9fuX0NC++MzGNec8sZXdtbQ2/+qu/Oq686Ds7depUqTGyIQOVxaSznMbUZf9ov9l5JBWmz9YRGPb5PffcUz6voQg1ze7ubuWdeeOQ91IOmKlvuzrIMg9tZ6wOnvmUyqDtm5SGJDVXpOo+bp71vjUp1DGT+CEAPwPgWyGE/3jn2t/CnlD/yxDCXwZwAcDQ7UjkAAAgAElEQVRfqF1qRsbBIMtuxiIiy23GoiLLbsZCYi4P3diPOs3CpnbW8OzSUulSDItea8LwErEDBeyOkLtIPbmG8MIeebtnW7ZXXgx3GL8D1/3Wld19KrvWNcLaPcZszCzq2PLa55eXl0u7OkJlw8qud0CGnr5ly9Ffe949y1VmWB1QrN0ay9ZyLKOpdpkeG56y2bR1t/8f1qEb9oStFOrMHZ62ZtI5W+dAO770HttgD3ZZWVmpyAXfb7/fr7C3Oh9ZdtWTc2XCLIvHvPRAAaJOv3Q6nQrjrUyYDZ+lp9NR/mgnq3JroZqQlLym7J23trYO/NCN1IExKUzruFpHE2JRZ86l3NBRryiKCiurTo/2MIuU065Xf29s2RBpg8GgLFtDywGjWiHrFKzjxztUxzLWGiLUey52Txn51HfJgm2e6aEbGRkZGRkZGRkZGXcrGoVWW2Q0teebxk5lFkixeSGE6C51Uia7KKqhqJRRsrtb3dV5nqCpfjhIbcSiYxIb8Jj9cAihZAY89pN/2zA648DnKC/tdjtqm5wKi+PV2TvMwcqieiMTq6urUa3GxsZGGZjeMhFeKB+1n43ZuXvjR9u+nxqmWSJlg54at01t0D3EDuNZWloqtQCWLV1ZWanUlcywZ29Ilk3lMGWfqHJR1y7f/p9iFD1W1mOl9Vf/tqy4l7dGzkjVIdWGw4CygkRKO9dE9tTWuMkzWo7XP9730YIyqLbwtox2u13O1UzDSBX9fj+pmUpptOw8rLa/VkaUUdajqoFRm2am2d7edn2E9Jdl6q+mt4xyCCEafs6Djqem8jt3i+H9WigdxMDe70WeCta0ZaUGdF21uhXS1OSQcjaxdYrV5W7GJKYt3jWd3Cw6nU5lstZ3WEf9ZOWm1Wq5p1vZRaxOgCyTjk8MBaUn0NlJW9VyvKanFHoLDqt65GJ4ZWWljP1pTSlCCGUYJ+vctL6+Xn6QPEcP20eLhNgiMJXG20h591Nyy19dFHgqZ2smwTT3338/Tp48CWAY25WL4V6vVwn1lFpEpKAbLs/kgrBOSNoOb4FgN6f6rF0oLS0tVdpjHer0ea8OFt71WYRW2y+kFllNF/Oxkw51Q2zLjeVrTW5SZetimGHh7ALRG3/eu64bbtOm5zUNP2cXm/q9sONGF8qp77/C2+QCow6sHrFmvyHarhjpMoncZjOJjIyMjIyMjIyMI4u5Y4b3C9PsGGw+s9otN2VC9V7MeS2F1I42Vh+7U1PWwVPHMK2tH1kOL4zRUUVTOaoTbgaoMmue05rNMxWGZpxMMnyRp6qlswjrdP369fLvEydOjDy3vr5eMn8PPvgggL3TndiGd9/dO8CKjO3FixcB7MmobdfW1lbpXGQD4uupS57TFvuLrB3r0O12SyZn1qd1HQbsIRdA1Wyk2+1W+lZVmEzHvibrFUOM5YldY508cwLeo/ydPn0awB5bzLI4f1H7wNO/rl+/7mpVYmYH29vblTqos5Ntg8q9nUPZV+12u2THeE/zsg5TRVFU+jcV3k5Rh8WzbOs8ynQdhzGPXbXjVQ+N8PJpyjTGHCi9e575FOVAtQ6cf6wZmjq2pd5V6nvP/tCT7jztkDVbUIdNQuU7dgCXx+KqOZ6GDwSG46DT6VT6xsqyXovN63WQmeGMjIyMjIyMjIwjiyPDDM8Kk7LCqZ2bt8PxbBDrssaT7Oi9cGjjyrO7Ut2VxWxTJ8U8shTzihiroWyX55jSxP5MZYM2mmTDPDs0PRRD2S9gaAc6GAxw5syZsj76q3mwPP2/zqEPWq46xWmaohge08pfPdRhbW0NAEqbY08j49nWHqbtZYwlUWc0y6goY2Xrzn5vtVq1bCS1vFRd7HxIxve+++6rOPLw4IKHHnqocqCGMsU3btwAMDymm++y1+uVTpScq1RuLfOm85dlv1ZXVyv2nJTppaUlfOpTnxophyz11atXS3aMMq2MtT2qWY/OJdj2jY2NiiwyH3UmpXZEWbkY66515nPzhlarVTKHfO/UOJ09e7bC8POdDwaD8rANy4zqYRM6r1hbbJ0zYprZOs6TwFALpX4XBDUenI+2trbw5ptvVvIgUr4fdhwdP358JMya/q6srJTypto7C9Z1aWmp0jdqqx/7hut1+90YDAYj841CnesIdeobp0G1yMxwRkZGRkZGRkbGkcWRYYb308530vSeh6q3q7OMybijDW2Z42ynmtS9DgOtTJjddXvPeDZL82y3dtjw7HvZX/1+P+ph2+v1KjaRakMWC8yfihSgERbImnr1IvNBe05gyDaRpTh37lzJUtBO94knnijbRRthD55nuA3VpWxFzP7M87wm23Dz5s1onop5k1nLdnoMYCz6h5de2+4dGsF7nhzGmDJ9fyxbWSgyrU8//TSAIfunB1GQJeLzV65cqdg4Xr58GcCoraSW7UV3APbkI6Z98Dzrz58/DwD40Ic+hMceewwA8NGPfnQkzc2bN8sx85WvfAXA3liwdukeO22/Bcq8Wc2esro2GoX3nfE8+ecVy8vLJYPOfn7mmWcA7PUl55FLly4BGPbh1tZWyQyTXefc0+/3K9eAYd95R3uT2Wcayu7a2lo0HGMIocz/ueeeA4AyMsrZs2fx1FNPAUCpLaMsv/baa/jjf/yPAwB+7/d+DwBw48aNsl72kA6VT5ZHOT9//nw5x7J+bMubb75ZajE0rJu2XZ8LIYxo+YAhW//ggw+WcwXbSMb74sWL+O53v1u2Q6FzhhdJRCNzaLn6fF3cVYvhWQ3ceZsAmoS68hZKmsYamk9al3F9ZGMQ6uIjpdJOhceZt0XGLBHrz0nanAo/RNhJw1NjTdPftkxOzNevXy/L5sdIHemYjpMcw5x1u91Stcs0XERrfEt1fuOEz2v6UYo5fwLAW2+9BWC4IOev56jnjaemjrEHAU9l6C2OrVrZWzirQw//5rvgb1EMQ5Fp3F+riq0jm1tbWyMxooGhfKytrZX3uIhkHXq9XmXzoo461jlI62zbqpsru+hW2SQ+8IEPANgz4+Biw8aLXV9fL9vBhc7KykrFdMKTMV5jm4uiSJqsxOK/6t+eqcwkJ8AdBLwFmP396Ec/Ws4BNKthP2xvb5emBnyfNEPY3NwsF4G8trGxMfKOgOGC8tSpU+W7ZTmc0y5evIivfvWrAIb9S3OyU6dO4aGHHgIwlI177723LIOLRXvC58rKSikbH/nIRwDsjYc33nijbJtCxwHfJxfYKysr5QKUdWf9/uSf/JP43d/9XQCj4S+B0e+FmuHZxfCjjz4KAHj44YfLerFsmprpWCR0frD9rpu+2OJ33FkHHrKZREZGRkZGRkZGxpFFOEi2LYRQjAt5MUs2ar+fq4M67VHWpo6TXIqt0bw8lWTMuL5uWK1UPTWPOiFWmoBs3u7uLgaDwYHTbHVkd4I8K3/XkUV9x9a5QFWbllHa2dmJMvtqOtDkYIKY7HrmOwTZCeskF0KosCBaJ8vkaT3toS4atsqqj5X98xw9bJ3JZHjMtR5awr89VWKn08GtW7fQ6/UOVHbb7XZh+9Q66XQ6naj8KYtuZe7YsWNlmy0b5ak3VcZsv+u8kGLtNX+to61zDOMcejSkHOCHe9PxZOsXM18C/NCDtm1LS0uVMlXWUvlb9o+/yuB7ZmvWmVTlgkzfm2+++UJRFJ+qNGAfEUIovD67cw/AngySTSUL+fjjjwMYmk0A1dBdOzs7JdtJ0xmVP+bP9mtIO6r+2W8PPPBAmZ7sPLVJy8vLJfvLe3qaop7eBgxNCHq9XiVcIet35cqV0gzj5ZdfBrCnzdJwacCoRoxlkrFmu86dO4ef+ZmfAVANg9nv9/Hiiy8C2HP2BIAvfelLZT/Q9ET7ivmz7z/72c8C2GOd2feUS/b/2tpa2db/8B/+AwDg9ddfL+uuzrwKNe2z4CmoGxsb6Pf7tebczAxnZGRkZGRkZGQcWdxVNsNN0YQRbsoeW/sr796kGAwG7tGMsfxToVbG1aWujbBFKjxbzPnIsw/WtIdtd3nY8JhXe4ynskrWuQmIOzR6R5Cm+pvleDtzZQVT79/WqdPpVJ5Thz/ayanNKp+39bijQRhJp6yxF1KN5ZHB4TXaNne73dKG0LYlhDBSn3lESvvgaQqA0TBTtq/W1taSY9he0zFcZyyn5i0vnf1/mvmijiNOnXlc03jhJVMaGnWKZZ1SGj3L0iujFpsndMzZ/o4dgjIPYB03NjZKG2za+v/+7/9+JZ1Fai7Ve+p3QOaU6cjivvjii+UhQbymLDvtx9VBD9ibV5gXjxL/2te+BmD00CDeI3Z2dkqml/a+m5ubZV3J+uq4s8w4HTxPnDhRsrGsC52c+/0+vv3tbwNAxalzd3e3Mi+oQxtZXzr4PfvssxU/Ij1Yg3X95Cc/WbYH2GOk7dyu/8ccoCdZY2VmOCMjIyMjIyMj48hibmyGZ1GPuvaW+5W3l74JAxIrz2NfmtTH2os1qYetTyryg5e+Tt6p5yzuhES6K2yGJe+kzab3t7UVJuugR8raPNXm0IaV8uy9yT4MBoOKhkOPOOazGq0hxrwqWI7aNvKaZbDUW95jrGhDp/bytv3KlMfGRK/XcxkPYM9W0HpLW9tXAJVDRWiXefPmzUO1GbZsu/5v7au1XSlbaIu6817Mrt1Lo4yoF/Egxuz1er2yztY+3QuV5uXvjXkbEcOrv+cjkfKzqKNBaxrxRe2f7Xvx5gvLCLfb7ZJtnFebYQ/e+7TQaAM23KQebqLzT0yjqXnwl34G3W63tGm2x8MDw4gh/KUWyvNrUM2Tyvi4tnrvmOHoQhhGePGOsSbz7Pn+eIh9v1KRH4Ahm23Hm7bVey5WLz0spq7N8IGbSdRRq80j6qreYvf1A9wUdhB6E2zdycFeq9v/k6oem7Z50kX0vGHa/kqZh3h5qrOEnZi9xaO3ELCypPnYycY7mUmfrzOBee2yEzM/Eu12e8SJRZ/XRYKG8bL56wfBOmPoookLALuQ0jZ4CyK7GNNF9TzMc6m5ycatpZOQ9iM/8Boy7f333x/J25qkAL6spOpg0el0Ks6PKkOx8RFCqJiT6QLIO4XQyj5BhxztG12w8Dkbb1aRmsvqnGRYF3Zz4C3k9DcWRzqE4G4GDgp8t+PGT2ycA9U+17HMe5wLGMqs1WqVi0BdzMXWLkVRjJiyAMNFLTB00PNC38XmSW+94J2gqddifaQOlExD05J2u11ZWKe+XdbJUtMXRVH51ti41oAv69wo1IHd0Om1aebZbCaRkZGRkZGRkZFxZHHoDnQHzfxN61yR2qWOY2dTapY6eUzLLs2andoPln9RmWCiSf2n6S8rS+qcYFlLVfnZnbuOB8uWap6xUHnHjx+vpVJWtjQmN+okx7L1easy9di3lBOb9pl9lmo6ZYyYl5Zr1afKNFlWUes+D6d5xfpdWS+2i4edqGkIg/LrSVx0DiLY5nfeead8lylzBK8+9v+UJsQ7XVPzjp2+p6ynZ+pimW5bli3Pk0XmE2P/PK3MONg+8Z6jZkPDw9nvnprFWFnWvj1MZhgYbxIYQijb6ZlUxBhHZV490zErE973W8e3zUvrnJoftT6ap1eemsRZMzLPkVm/A/Ydq+lTnUOwvBMPvbEVG8PePU/TXQfKZMe0n/nQjYyMjIyMjIyMjIwGOHRmeF6RYj0nYZdTNsPjdpYpRrlOHeyOP1VHW06TNtZxFKlrA3u3oGlf1n2fsXeZesd6MIRXrn1/3jG13ruz7IHH5ijLHCsHGDp2MDyUsne2DnrPc/6IMTkqg3yO9sjdbrdytKoej2sZiJTtNdHv9ydiKmYNW74yTvybznZPP/00gD0W6tOf/jQA4Ad+4AcADN9lr9crA++/9957AIB//+//PYA9ZrhpqLlYaD+PZfNshr30MVtZ+zfbSlitgMqVZde2t7cr9sfW/tJrl2pcUnVXhi8WGlGvMbyXttOyix7LaNnQfr8fZbwPAq1WqzzEgfMC5ZP9duLEifJvajCI27dvVxzUrly5Uv5v+1A1JYT33ffskFOhJNWxGBidV2Nzodry2rp4c+jS0lLFjljHk8c823Z5bYg5uHrPe/KseXvzItOm8reosw7ynL7HITPDGRkZGRkZGRkZRxaZGXbg7TyassF1WAqvvJQtWKpsz3bOS1OHvU2hThqP6dZ7sTw9dnKe0ZTpa9K2cZ7ndUIUeuWl3oeN5KBpPNaEz1i7Nc8+TGUyFvrNY0rUVs1Ga0jZkir7y3p5LBdZG9ZpZ2enZDcYON5jR2w9NeKB18exY0P3Gyl7PC+iAO0v+f9DDz1UHq368MMPAxhlnnjYwCuvvAIAZXSJr3zlK1GbTP1bGf3U/BiTW48t9droaSFiESq85zudToVB9Zg3gv2o6WNzoi0vZsvsfSe0fTYCC9N0u91KtAPLYHv16/f7rh3uQUFt7T/0oQ8BGLK/rNfJkycrdu5s/yOPPIK1tTUAQ80FmeHXX389ake7tbVVHq7Dwya2traSkVBS2ltNp2lUruvM1YTWQ9+PlU/+v7u762rvbL082+bYnBv7JljtnRdFIsXs2nqOQ0rL3PTwo7wYrolpFsGT5pV6rs6COoX9UNnqJFqnH7znF2ERvJ+oox4qCj+cWez51MZKY/zaD43CqoEJVX95C3RdLNr62Xp5IYC0fDu5aR94k7BV2emH34svzOt2UWFPdNL28JqGffPUqIdtIqGwiznvREt1sLGOlWy7xiDmYuOXfumXRp7XPL1FrV2cAVXnRJqZeG3Q/OwiUs1nNK6uLY/3NMa0rYs+42306sx3KVMNfd4L22dhx5UuTqyaXJ3IvIWPdULyQioeFliXD3/4wwCAxx9/HADK0+C03TSl0A20PRGOfXH8+PEyvJjdFCk80wQi5bBJqPxY+dSQkN58l1oYWnnT9LoRs/9bp2pvg+ohRTxoP9hwlIR+s1J5EroIt3Gg1WFST1LUX2DvXdPErQ6ymURGRkZGRkZGRsaRxV3DDM+SUfQMuj00VUPXKW8/mdFJdvl11D917tUxF5nUdONuwKQmFB4jVScvy1ItLS1VrimrEWO+NI3uypmHDTSvLKN1MlJmIaWyturjpaWlikzpaXYEnW92dnYq7VEm06oLqTJV8xSyHGSP9Zp1UjxMGS6KeNgvD9evXwcwNHs4c+aM20fMm8zLV7/6VQBDhlzbHGOLgNHwX1b7oNoEy2azXDWT8DQHMTV/LGxYnbnJji/PaVPNMuxhMSl18ThZibG4al7B8lIn5FlNgNZ53ubcEEIpw3RqVUez8+fPAwCeffZZAMPxqmwpGWFqMK5du4Zf+ZVfAYDSCZRM8bvvvlum90KrpUwNPIdL1pWyTtn1Tndk3ru7u+47tnlyPtU50JtD7TvVcWHHj45DT3PB5+13ot/vV9h1lanY90id/9ies2fPlnkzfCMP/WGa5eXlsv/47m7dugVg+E6boDYzHEJohxC+EUL4v+/8/0QI4fkQwmshhF8NIXTH5ZGRcdDIcpuxqMiym7GoyLKbsWhowgz/dQCvADh15///BcD/XhTFF0MIvwjgLwP4JzOuX23st81s3fR2d51iRlPP1b1HNDUWb4omDPE4prsJez4DtmJu5XZSzYLHutWVjZitubKldpfebrcrNr9kWRXK9Nq2pZyHlJmwNl58fmVlJepk4QVfL4oiGkZODyGwYY+UTbJ2wRrGic51arNm34WyPXW1TQYzkd0m5ZIZXl9fBwC8+uqr+I3f+I2RNGozTAejOnaXat9pWeB+v19hK/U9WzZVbR5jc43a31pmGag6B3nOa3UODNFyY7bomk41Dx5DS2Y3dZCC1aooy1jnfVvHUa1fHfvnGpjZvKvaDc4PnH+8udPTGNHun+zi1tZW6RD6zjvvABg61/V6vZJh9OS6jg2vXo+9M83Hvmu1sfV8ELw8vXS2Tt4cb8tRTYZlwfmcZ4eumj1bB69+Wi9r80t2f2lpqWTUmTdtw5eWlspvlH0nly5dauz8WYsZDiE8DOC/APBLd/4PAH4UwJfuJPkCgJ9qVHJGxj4jy23GoiLLbsaiIstuxiKi7tL5/wDw8wAYzfteANeLouC29yKAh7wHQwifA/C5aSp5lJBiCT14TF/suXHsdJN7agPU1L46xZ5PyUZYTCy3d+ozU9mNta2pVmNcHqlrFhriKnagRLvdrtiTpaJDDAaDit2n/q/2lPrc9va2y1gBezZ0al+qeWu9yRhtbW2VZdKu17ZP28h2dLvd6DtYX18v7dcss9lqtaLRBibEvs+5KbZT2SG1i47BY8S86ASWreGhCnqsN6Fp+feNGzcADJmpzc1N106Z5ZFFsjaWCtUOWDaNeauNccom3LJ+IYSKxsAe023Li0XOYD08qH2n9xzRVDYnlOWZye61a9cAAP/8n/9zAMC/+Bf/AgBw3333ARi1aee7fvTRRwHszRnWfvrNN98EsKfZofbDs3P1oi3EmM1xIUsta0yWWmWeNq9eFBaP8feOfI/N954vh+Zjo094rK9loj25Tmn9Uuy05sXx+e677wLY6ytrL67fHtaHafhLLU8T+R27GA4h/ASAy0VRvBBC+OHaOd9BURSfB/D5O3nNl2X+jDHOhMD7YIx7bpJymtShKeqqC+vUpyma1H1auQXmW3brfPgsxvVfzLQhZUKxvb09ciIZn7dxa/VjzwWQdVRLxavs9XruQsa2TU+Ls5O0p960k7Wq3fmB4mKw3+/j6tWrI+Uwrapkpz21a7/n3MNykGq321hdXS3/1l8vji/l4ty5c5Vr3JQsLy/j4sWLAFBxVOt2u5V3rgsDvld+/D0TGULlgs49DO9lywWGMnDr1q3Khkud/wiNhZ2KSR2713Th66n1Z7GJm7Xsxsz/6CDlOUq98MILXr1sOZU0Xki51Dda03jyAow6mlFOuBjWDbSt57gNEMdK03i8di7c2Ngo52jve277TRfF3sKa16yJmY4f+1y/3y/z5QaFz2u4wwsXLozUQRfxnnlTp9NpZD5ahxn+IQD/ZQjhzwBYwZ4N0D8EcCaE0Lmz23sYwNu1S83I2H9kuc1YVGTZzVhUZNnNWEiEJizBnZ3e/1QUxU+EEH4NwK+LQfyLRVH8n2OeL2asBo+VM/M8U/3k7a4nZUnr1r2Oyn2a/GP5TssqpUwhUmeJs9zd3V0MBoNGjZhWbu/kUaTUlzXr0TjNPpiOuOWpk5z3HmKq6BjI4lqTiOXl5ZIZJkNCrK+vl8yAd6gI1aDKrGgaxY0bNyrhihTW2YZQdaPHiqSes/2mjoEhBJpuHKjshhAKax4yqUnNmHJG/lfnMMrC6upqacZCBxmebjcYDErnJqpDlS2ieYQ9POOxxx7Dk08+CWDo1Kjv/Xd+53cADB0DNQwUrymzazUahMoQT91juUVR4IknngAwPLGMeV66dKmUaar8qV3o9XojobTY1hibldLKpRyuPHinjaW+Xdvb2y8URfGpsRkL9kN2U6hjqqBpbT9Zsx695mlVlZ21Y1/nB5bD9NSO8BcYags88wxvDqV8Mt2NGzcq7VF21jLCOp9bWU99h6lNUe2XmpgxL9Ucslyr7fPYbc4PmpbpYmHoWLamIdbX12vPudMcuvE3AfxcCOE17NkE/dMp8srIOChkuc1YVGTZzVhUZNnNmGs0YoanLmwG7FrNchqln9b2tY7R/H6wiONwWLaBQLXdHntu76lsxOo+CTM8C3iyazELVn5cGU3LjNXB9rnaS1pWdzAYjDgm1KmTDXWmgdJpa0nmgixFr9cr7TdtiDU9lMH20c7OTsWZQ/vaXtPQapZN07ztYRGpo0u992bz3traOnDZPWhm2GPV1C7YsmJkVFVjwCN0+dtqtUq2mAcs8LfVamFtbQ3A8H1Rc3DPPffg/fffB4Dy9/d///cB7DHFdNJR+bN9pXJFGWY9n376aQB7NsR/9s/+WQBDm0c9AOP5558HAHz9618HMGTXbt26NcIIA3tybw9B8OyYraau1WqV+dr0as/Oayq/1snMGws3b95szAxPizrMsLKeFjqnWcdfvUctBeVtZWWlYvN67dq1UvNgGcrUeNJ7p0+fBjCUfT0SmnnyHe7s7FTyJfvZ7XYrLLbOgdavQw8g4j2GjtN5lpo3amjW19dL2bAy4h12c/LkyWiYNnV2s2na7XblPanDtnVc1SPcbR/pcyEEbG5u1maGD/0EukkXi/uJWdSliVnBuMX3fqrJ98OsYpxTRkoNfRBmNPuFaereZBE8qQOl9+Hw4mjGYv02gToEAcNJcWNjo1QXp/JNbVB1kZ6qY+xDqot1W54XT9TziPae806K4nP7be7SBJ7K+CDmGI0jzQ8bF6nA0CGNiwYuEO+5557y480oAlyY6Ieeeaqq1C7+PGc3L2KA3exo/6hDJTB0tASGCwr9KNPhjosttsuTT89xSj/+9h7r1ev1Ks6JugC0m8yUU6nWpYmZwmHB9oVuvniNGxjd6FM2uPjjr7ZZF4OxKCLHjh0rYxYzTzUP4HunbPA5jWfMccAF75UrV1wnYj6vsXb5HOWM19gv9957bzluuPD/T//pPwEA1tbWSvnV6EEsx65jdIOrJkf6q3X1Yj7zmo5Xu+DVDVnM+c87IW8ac85pzCQyMjIyMjIyMjIyFhqHbiZhMYv6zNLEoA5zPUtWJZXXtOYfk6SZZX1mkd88m0mMed79O3WNaKrWjt2ry9jXQdN3n3LOSeWbqvO4sDmxE4g8ZzdlFCyDkWIpPCbP3mN5t2/fbuxANy1CCEXTk5juPOf+rfCcrwhlldRkxqqfCQ2h5ME7qQ3Ye0cxdXWn0ykZQVvPoihcRxzLLtp36NW93W7jIx/5yEheZAO3trZKFpssozLLzF9V8DbUoPZLTJ3c7/eT5me27iqjnmqa/Ue2/rXXXptbMwk7ltnGbrdb3qNjlprikAlm+o9//OMA9kLt0XyHbPvGxkbJxtI8ho6UKoPheX8AACAASURBVHcM9UYmPoRQcXZjn7ZarTIdtQVvvPEGAOCXf/mXcfny5ZH6kfl99tlnce7cOQBDprfb7ZZjSzUVAPD444+X7Wcb2K5Op4PXX38dwNDBk+35zne+U8oqHVj5/82bNyvalp2dncq4UZMI6yzqybUdy2rS5o392DeLphdNzCQyM5yRkZGRkZGRkXFkceA2w3WYoXmwH04xVIuCWdpjN2m/vsNF7LcYZmU/HfsF0g5gKRvZ1HOzwLTvsc7zaldr2R5lZVOHZ3jleQ5whBdeiensufeeHb/HGqfqMk+ow/6m4Nlea35WbgeDQWkTaBkkz25Z+9u+pzqy3e/3S0Yr5nypdYndt2Vaeer1eqVzXJ36kaXrdrsVW3XvlD7tR3sv5RSqMmrvqRbDXmN/KNt4WKij5fLCMPKXz5OF1JMwrQ3wK6+8Uj5HG16yuHoK48svvwxgGK7vYx/7WBkikGC/HT9+PDkfcI4hY0s2+PLlyyVrTGaZeS4vL5fpKUu9Xq/Mlw6kemgQHVDJhjPvW7dulWUyPUP/7e7uln1k2WbtP5URypB1uO73+xUHOG/+GWdHr/+ntJuT+EFkZjgjIyMjIyMjI+PI4sBthifxTp0Hpvig0dSudFLU7dsYYxfLcxJWet5thsexJOMigMRs2yLlVa6lguo3Zfk8+8LUIRWTyl4dW2He0/717DIt1L7MY8WsnST/12D31o5N2Wk9XprPxzzKPabKoon92qzgyW2TuWWaubdJJB0Nr2T7tN1ulwyaZfg0mH8dvw799drsHbxg87D/e173mib2nLLAmiYWCs+bVzU6hGWsta2xuSOE4aEGtp7dbrdkGS9cuHAoNsNN5jIidaAI0W63o0che8ckd7vdSshJ9qUeNkGmltEbtre3y3s8NpzP7ezsVEK+Me8rV65UIp9oJAf7HpeWlvDII48AAB544IEyD2Dv6HKNOgEA77zzDgDgtddeq4TkI44fP145GEPHne1njTBB6FxqjyH3bIat9kXLTEUYsveoqWty0NGhh1argxQdvt/lNMWk9apTdh3TA2/ynYUK3ZvQYwtjL1RRHYxTlc476r4Xb4HY5Az11GJGJyM7sXhqZ2/TUkdVPMuNmcbDtIsKdaSwoc50sWtjbOrigHnwg7O6ulre44lhXCDrB8h+oDTUVB21/TzIbmzRx3ve3wpPFjw5mrat3sKFCwtdsFknu1T7xqHJpiA1JlqtVtl+GxrKM9dJEQtqbkOZ1sWqXfDqIiVmCuIt7gjPNEnfqd38zSOs7OlmIDbn6r06suuF/2I5nEM0rzfffLO8Fgu5qPfs82q+Ytu1u7tbkdNer1cutrnQpSnEd7/73ej7T2F9fb0is/pr89QFsp071dnN/mpIVSv7mi6F2BqxybyUzSQyMjIyMjIyMjKOLBaCGfbQlEFMsctN1dUxdbenxkrVa1J21lOppdpQxwFomvp4eTZhOpvUYR7YtmnhqfzZd6l+q8PsK0Nk33Gn0ynVnnYHv7OzE2WsqG5iOs1TWbGmoMru3nvvBbAX9ohlM9QUg9LrLp/PKcgYes4ZZHLIQGsfsf0eE+E5G8XmHe9EJmISk6H9hBciLFZHZSo9xPrKC4m0uroaZYc81t3Tdtj6AlUWyhsn3jvx5i97YqLmw3scQ56WgA573pzmpbf9nWLwQggVefUOSGC72IZer1dpj2U39ZrW1zuk5DBQxwTGu27nNJUlK1caAo0OY5482G+uN45UC2UPZ0k5QqfWEuPa641dpo8x0N5Y0bndahv0IBC2UZ3kYqYk2h7LsHt1H3edsO9gmvVMZoYzMjIyMjIyMjKOLBaWGbYIoXlItmntHmO7Ou/aOKcnD7Ed4Ti2pkkdpkGKnbc7yXGs9FGA3Xl7u/K69vEp1iAml8p8WXZDWTvPVo2sicce2LoMBoOKna46cVm2xXNMZOggZbBidrohhBEWTOuteWk/kEmOHQOq97y+tn2kzJynFZqljXVTjHPcrMP8xtJZJiwlv9vb21FnmHa7XQnHpPW3trIpm1xiaWkpamMbGyeWadLnrF2wHUte3VkPr87e+Ne8yEDbPtY6eNoItpnanMFgULG51rBwsXn4MGV2GqhGIcaWLi0tVeyh+Z52dnbc8HYxu1Zde/CXjLra93qH+MSgx4zbI7S9tY7ahcc0VFp3nZ+9+ZtpVZsWy0vL0eOX2X5ej43hptD3EOvDVqvVSDsNZGY4IyMjIyMjIyPjCOOuYYb3Gyl7Td2dpHbZjW1YEoxOzEPV26XWqUMde1RgdNfI3a/HsFgWpI4tj2eTeTchxmx691LPKVIsH3fnZIU6nU7F1lDvkYEglEXhcaEeI8e/1fvfyq6GrGI6r57KtmieemCDp5GwDK+nPVHmxIYK8mygY4yJXtPfSe3e9hOqDdBr9tde80IbER5DbjUBRVG43uaxMaAsnefBbm2SrZzoPdZhXHg0j42N2S17c5PKtB5UYcvz7Ni1DJtnjDlUhpzt5/jQKBusC5lh9eGw78urw6Jq7KwMK+tpbVmBKkOr2jIrQxpWkc9pnvZbqHWwkW60vlYmPJt7HiGt85BlgXXOtfXzwhZqHWIMtNdHWk/bRxoVgvd0PtYy9VpqXaPjzrL17Xa7Ui/L1jexeb9rFsPjBnBKDb3fZc8qXx1ok5SZWnzV/ZCnJtGMOHRQpxYXk5rVpJ5T5w+rqvJUfXai1YXluFBbtp7eZE+zBTqUaIxf+9HWhYrGB1bwdCXNczAYlPkyDzo3bWxsVORY2xxbRBdFUVEbeuNhnhYYIQR0u133nei1mNOfLmBtG7ywW5rGLh7qmo3YxYO3ufLaw/x1YWhDsXmqU13ApmL8WtnUBZB1NFLzoNi714+55h0zz9nZ2SnHAE0oGNZLN5JcBHumP5OE2JoH1DGts5vWra2tyimSusG3/eyZB2jean6h6Pf77iKY5dm505Mp206Ft2i0JkW6sLZEh9aXMqtttZtCra/XN2yf3Zh1Op0R8xut+4kTJ0actbUNGjaTddC5xS6svXWQlQvOW03m3WwmkZGRkZGRkZGRcWRx1zDDh4Emu45xaeuo0JQ9iJ2G5jEfk7K5mf2dLaZVTabS1DnZsdVqRU81UnbDYnt722UG+L91nlIVGnfzyh7YHb46WdjQUeqsFDsdbHd3t2RyyDpvbW1V+oQh3DRIvvYNMMqEes5aXkgqTTNvIMvlqWSJcYfk2OdSjikxk4DYtTrwGOVUXjrOYuY6Xl4qY5bh8hyoVD5svym7HWN6lRm0LJumJwus48PWodfrlaZMVkabMmTzjDoypOOXc4vtt52dnYoJgDcvEClntJQ2SZl+r34eex9rT+yQFtYl5ZBn5WWcI6n+evC+F6rZs5r4kydPVu6xvsvLyyPfIWD4TUg53aq5COGZcNVFZoYzMjIyMjIyMjKOLDIzXBNNbThtmrqsiLIHqZ1NzChfMa19b13b5JTNaFPEnJfuJsc6ywYBcc1ArN3WDk3zitnCKevpOYfZvNT+keyU9655Tx3jyLJ4Tkpkp/mrdnzMg/c0DJtl606dOgVgj3Ug1PYsZh/53HPPlceleo6BsXGnDFudsTUPbJzaP3qOcxZqnwrsMTTWllDZeo/tZFrL9ihT67FKMWeipaWlSh3o7NPv95NOYdaByjuIwnOAtkzijRs3oiGhtF162AL7yDJbbMvKykrF7lo1frYuJ06cqGhTVBNiQ7hpfVPHKjf9Rs0bYnKjtvLWsVFDkVlbXu0rle8UCxmzaddjiK0NrzLDKVtu71vgfS8s48r50fvO6Fyq40zTpEL57e7ujoxBPmc1Q3a8anuIEydOlOOF70k1i9ZZVsdTTK4ZWi3bDGdkZGRkZGRkZGTUwEIww/PAsHiwTESK6fNCPenOPWVjl2KIm7Cy41isOh67Hrxd6rQsw93CCKc0Cin7ynEe+Ck7Mpuvd+yl/e10OiOMlT7f7XZHjioF/MNU1B7ZhnAjrHe/5qnshmUWtra2Ksd/ktXd2dlxGXIbKUI9/M+ePTvSN9YDX/MaN04t5mm+6nQ6uO+++0aueSwU3wvbb5l5YMgcUT5WVlZKRofs/NraGoC9iB0sh3kpO2Tf1/LycpRd9eq+ublZaYvHTlsmmm3odrvuoS/sBxuW0IYdBEZlxdqs63iJ2YX2ej1XS2Tth5XBjI37VquFM2fOABiOCx2DrIMNo6V9YyMUqC3svBzLbOGxpXxnq6urUWbYYxx1vrCHkzStg/5vD09J2agrvOgo2r5UPdgOXqdccuxynKoMUiZYX42EYg9y0fxTdfc03VbDov4dqgXh/7HDRLRczxa66Ty8EIvhWWI/F1mesXxMLaj3Yqe7NFHBeuFGZvmcHciptN7Cv475xzQL8nnDLNXndZyRvEWgVZemTGp0Ujx9+jSA4Ye90+mUkyDz4KSqz7G81dXVysdTPwC2PvxQHTt2rBKvk5Pj1tYWbt68Weahz92+fbt8Thc7mi8AHD9+vLz38MMPAxguqlQtx3rxuT/2x/5Yee8b3/gGgOHHxIYqmkdwUcg+1VB0wN774vu9du0agOGCSk0hrAPjj/zIj+AjH/kIgGHYOvYnADz//PMAgJdeeqmSl1XNLi8vV1Sk7H/9m/XknPn++++PtFPzVnlnnroo4kdfw5UxD6qY+V4feOABvPrqqwCGi2AvJJuVaXVa9cZhLD6t1pljTZ1P+asLWI4/9pWq/9VJFRiOhdQGJYRQlp1yLps3aDgvazqiGxgvBi5Rh1Tyvp3WJCKEoYMxr3lyrRt7wCcNbPmxenobTbuxpHxubGxU5m89RY7jgOCY2dnZKcciZUgdp1PhB+3mK4RQWQNxrtd6eeZJth+mMQ3NZhIZGRkZGRkZGRlHFnPNDO8nOzhud2XTpVTZipjqO8XKxfKq036r6vFY2abl1kGqDHWesY4v6oiQUm0sunkEUUfOxqnfU7LhmUJYhxCPbbcsgKpEyXpyd76yslLu+NUBifnYcGjr6+uVIOrq/GAdV+xBFpo/2Qd12GBePGADQEUVqQyvdVLZ2toq09uyNXwV26Cs8RNPPAEAeOyxxwAA3/zmNwHsMaLzrM1QB7Xv//7vBzCqyicj/MYbbwAA3n333fJeTCtEJxUA+L7v+z4Aw3588803yzwUKQadpitksZSxpbaC8sD/r169Gg1zp45tFjrm+Pzt27fL8HuUW5qY7OzslH9/+9vfHslrfX29ZMg/9KEPARiyuY8++mgpP5cvXwYA/M7v/E5ZdxsiU82BPLOg2KE56+vrFXaa/ec5SelJe1aDRKysrNQK2TgvsKzgI488UsoJGU6+g0uXLpVsrD2Y49ixY6WG49atWyN5AuO/fcAoO0tZsMxwKlyb53ip5abWE1YLQi2A1oH9cf369cq8pawu8+J8SQ2Qag3Yx9vb2xXzEs1bmWDbHlu2ZwphMc48pSkyM5yRkZGRkZGRkXFkMdfM8EGhjq2s7s6a2INa5tZDyobWy3Ocw1XMtma/mCvPgc4eZ6n3vGMfeW8ce7qox4kCk/X/uGc01A0RC5GWsitWubH2gdvb2xUHB2VPvXA6MRsuMgxad7IN6+vrpeME2VwyNFqOB7VVZR2szTBZxY2NjZL9tnXRAzw8BxbeI0tNpyW1q/YcuYDDOQpXbfUIMjkes0I21zrS6d9kHNfX13H+/HkAwz7W9Na+15NldeyiTJF9Zz0/85nPjPSzPtdqtfA3/sbfAAC89tprI3mrTJMJo/x1u90yL7LBnmMl5eLBBx8s3z1lVMMHWgelBx54AMAeK2f7/wd+4AcAAG+99RYuXrw40lc6PqzT2+bmZpmOv2Q3B4NBhcWl5kQZXqv1WF1dde2PiXnV0KX8KPgOPvvZz5aOnWz/t771LQB77/DSpUsAhmPZCxlI7djW1taIlgoYZS+Zv74/W0/KM+v08MMPl33N+YjM9dWrV8uxlAqLp7AaQdXOsU+o0aLPxBe/+MWybDu/DgaDkhm3Dqvq+8N7rVarIoPsj16vV3HQZn9ubm7WOsSojqZznAY+hVpPhhDOhBC+FEL4dgjhlRDCZ0IIZ0MIvx1CePXO7z3jc8rIOFhk2c1YRGS5zVhUZNnNWETUZYb/IYDfKorip0MIXQDHAPwtAP+2KIq/H0L4BQC/AOBv7lM95wZ12T0vjM4s8rVp7Q5ZbfxmwQTHmIE6dlMe6rDw+vcMbIiPnOx6ttj6611TFs2+o/X19cYhxWI28zwaWNMrK0BmxL531TSk7MOUIbBHsfJ/smkK3tNg/ATZu5WVlbIssiHq6c+yeY+Mk4YjaoCZyC0ZnLq2n2QTlRm2/cH++/Vf/3X863/9rwEMmVA+v7W1lfSIt+HGiqIoWTgeiHL//fcD2GPnbNQFstN65K5ll9R/wtoH7+zslHVgRAoNxeW9M/Yh68nfzc3NkiEny6xaBcu88jnVdKlmgyy2tWVV+1P2s2e/TfD/jY2NMh3rp2PGhvdSf4IJbYb3fc71vgv8+2d/9mcBAH/tr/21sg/5Psnm7+7uVphwykGv1yvfB+1t/92/+3d4+eWX3bq02+1SM8D8r1+/XpbLd8w0H/7whwHsaSesHS3LvXr1anmNGi61CbcHZCwtLVWisFCOTp06hWeeeQYAKjbqf+JP/Iky6gv9BhTsNxuhpNVqVdY099xzz4jmBRj239mzZyuyxz66cOECvve97wFAhaXWaEXTfoPGIYxbMIUQTgP4jwA+WEjiEMJ3APxwURTvhhDOA/hKURTPjMmraDK45tkhZb8x7kUelPpq0sUwB0Vsgq4LqwrZ3t7GYDCo1fhZy66dSOrUu44Mj3uXsxwH1jTFK6PuhoVpvc1XbDHc7XZdEw0L+7FT1WUsjS3PhjTy4i2rapR5UQ1u819eXi4XI2wPFyW6iOYimAu427dvoygKfhjHyu4s5fbYsWPFU089NWK68pM/+ZMj7bt9+3b5UaZDIEPIbW9vJ80cYvDMte60YeTXXo/BfjdSzqCeHMbKjdUvda/O2NawVkQqHmvKYShVnrbLOsl5KmOrzl9dXS3T2RMh1dH0woULLxRF8alYe6U+M51zm7wv1vuv/tW/CgD46Z/+6XLTZPtZNw/vvPPOSJ79fr9cBHKT89WvfjUaTvGxxx7DD//wDwMYziesl55AR6g5lTW5+d3f/V0AwAsvvFCm59jk78mTJ0ec4oC9jSPbqmY/wN6GnQ6e1gTsxo0b5QL87bffBgC8+OKLAPY2pZZQ4PO7u7ulCcW5c+fKNJwfmT/Nm86ePVsuqLkI1s0o51H+sj9u3rxZmrPYTW+d2Nd3FtO11gt1zCSeAPA+gH8WQvhGCOGXQgjHAdxfFAXdhS8BuN97OITwuRDC10IIX6tToYyMGSLLbsYiYmZyW9feMCNjRshzbsZCog4z/CkAfwDgh4qieD6E8A8B3ATws0VRnJF014qiSNoBZWZ4PCY1P5hl2SlmpS5ih414eSsDlzLxmIAZnqnsTsIMx/43eTfKaxoo0xorp244m0nK63Q6tRzK7AEFqeeUFVMWzXP2469dJKq6mSo+21Y1QbLt87QhZDImYIZnJrerq6vF448/XrZN68c2b29vl0yMNe1Imc/ErtW5N+m8Yp/TMrxwTkTq8KNUOalrdcaJakJS0LEXSx9j24HR0+lSmhdPY0PHLso9f3WcvfXWW3WZ4ZnOuU3ko8k7VrMCHfu8Zx0OT506VTkh8bnnngOwF1bwR37kR0bu6SEn/JvMMpnoohiG/qNJEJ1AX3rppdKcxjr7nj17tnTC42+n0ylZbB6qo8wpTSZs+MJWq1UywzQD+a3f+i0Ae6wx+8Gbq9lvzPPEiROVuZas8f3331+yyjTHUMdpNV8BRkNq0izLc+IjrBnVxsYGer0ebt26hV6vNzNm+CKAi0VRPH/n/y8B+D4A791Rd+DO7+U6BWZkHCCy7GYsIrLcZiwqsuxmLCTGMsMAEEL4/wD8laIovhNC+J8B0GDlqhjEny2K4ufH5JOZ4Qg8ltTea/rctFB7UO+Y6UmZmDqsaawdTZjhO/nMTHbrMMMpVsfJc2x+qTwnQR1muI5NZN26Uw70EBYb6i11nrz+b9nfcbBB7pV9I8vgtdXaBSuLPC4MokIP8gBQmxkGZie3nU6nIPNnQRam1+tVmB/PJrcJM1xD4zjyOw6x9HWZ4aY2yl46O6fV1aR4Bw/Z/DWv2JxbFEVUm6L1tPXy3mWK+fbu9Xq9WszwnednNufOWhvqtbHOt1NZeft+Op1OybQ+8sgjAIa2tbdv3y7Z0itXrgAYMqLA0HabY1SfI4Nq36NqwvQIc3tMvQ1tCKBi0+tB0zMvptdQl55csz20FaZjLTCcR70DlZj/o48+OtIPu7u7ZZ3tYV2al/XTuHjxIra3t3H16lXs7u7Wm3NrLoY/AeCXAHQBvA7gL2GPVf6XAB4FcAHAXyiKYi2aCfJiuA7qqOfq3psl7CTSbrejH0ldRNsJZNyCx5ZnMcFieGayO81ieBaYRd7Wycb7OMROCJymPI57jQrhOfjEZENlyoOVs6IYxrrmhK7lWacUbWOsnHH1tf1lTTEamvjMRG7b7XZhnW3suO33+8lF/iRqe83fQ9PFaZ3Fc9NTqyw8GdNyY3VImTY0JTUUntNgzJlR60d4ab3n6mAwGDRZDM9szp3V980uYLvdbsXsSseD7afUaXEqN96GZ1rMwtwotpHT77GdQzudzsiiFBh1ELSOmrqRs6fg7ezsVKJ3aEQZPmdPSNTTTx988EEAQ3Lj2LFjZTo1SQP2Ynjv7OzgypUrtRfDtYwgi6L4jwC8gfCf13k+I+OwkGU3YxGR5TZjUZFlN2MRMdcn0NVhguqk9dLPog4pFneWO0PvBLEU6jCvdZ5TWPW6x0RoPnXUcR6bl8pzETAJk1H3vdY5wcxjsNREgbtslumpzahqUlOCFPNl32e/3y+vUX1IdtKLT6lMgY1NW5f58Ew87Lhh27V+VtWn5duyPRW2siKxOWlRZDeGFItr+8iTZe2HGAulfeQ5SKbqxmc99qtJ33vlaJ4p9m/ad+3lZX+1X2x53px7UFrDRYA3P9h3RRZTnevUgYz9SfZRT0Ek7DjQecEy0B7brLGEyYCyHIYdGwwGZf40R+h2u5VTOG2YN62Xav9iLLgXc11N1Wx79PvtnZ7HuZVt9N4F0zNvPbnuj/7ojwAMQ8c98MADZfsJ7X91uq6Dyc+uy8jIyMjIyMjIyFhwHDgzPCsGt4nNWYxxbGLTVvdekzRN4bGtdWyMUzZjTcvWMuwuWMvlDq+O/d40NqmLDLZf7dc8WAZiHENsWUuPtbPnyrfb7QpLynA8g8HAdV5gnmRUiI2NjTK9PUUr9a6XlpYqzKIy2WRGrC1lCKFshzK+NiyQOoPYPJTJsXWk7Kf8Hbywa3c7Una0Co/1TOU1rkwLq+3wyra/ejodr6lWIHUojZ23VF68sVdnztUwgKrBUNyxOa/UxyLmy6F1Tz13N8Jj9a0TmoZUtL4Vx44dKw+ZsAdQLC0tVZzDtJ9jJ4F670J9Oey8Tec09YfQEGkazs3mH1sTeOOO/6+srFQOuNDn7MmF9r7e07FlvyW6PuO91HzMU0ovX75ctt+efNfr9RrPx5kZzsjIyMjIyMjIOLKYO5vhg2RXUgzqvKOJXZiyHKk2pkLxpOrgMdbWLkjziz2nz8/bu/B20NPaoafsLBU2BJkylHbXnLLn9DQkas826UEp1nZMw6eRKdFjPWMMq9efZGFCCCNMNTAMzaMshR43q8/a/C3Lrn0Vk0+1G/S0InXsYRcZdVjFlK+Al14RY+RT11T+vPp6trXAUK5sntaeM8Wgqbxbu2XVllh79HGasNj9EAJsRBsbvs+mj11LzbVHQVOnc6FlOJU11rCI1tdBo8ZoZASgnsZWI+tYeWu1WhW7W+8eD+TwNAo6L9uwlF70HK8/UtrfVIQNbw6NaSxS3yxNb1l3ZcPtISm2z+pg7hbDh4lpF+L7vZCvq25MCUAd9Z8Kcsq4PlVPO7BSjguLumhIbQbqIDXBpBawnkNE7L6FnQz1420XsDqZxpw++v1+5R2HENx0fN46tKUWoqzL0tJStA5FUYzE22T6WL+02+0y35i5RAx2QrfvS+/ZcucV48ZyDN778p5N5e/1W50+TdU1NX8RKoephYuaQqTeo+2Hcc5usXtapi2v2+1WFk0pZyxFymTK5uVtVus4784jYqYJuoHhgopzRr/fr2ySNa6+Z/Zg1fyEmmuxHKZdWlpyTRpseXUWiHrSHeGZ73h5xRbK7Xa7TMf5lW1RxzbvO5EicIiUszKh78nbjFrnQv7SDKrJmiKbSWRkZGRkZGRkZBxZZGZ4AaFhTeqEXavDvHrmCx5SphSsk6ryLNtYR/W5aJiW+ev1etGg6IDPFsf6zKuLl5e95zkq6DMpVbRVXynr5pXHazw1SNlcyxAow+s5bDBPTxVtVdY0q9A8rIOHN468fkk5KVk0MWmaNUIIFQdHoq45VEw7pO8ypTLdT8xi7lD2zzLCXlke8+85dTJtE1Zb5ZbQuT6m2VN2MsZSjnvOO+Fx3rUadWHNqIC0XHtailj/ap5WDjqdTmVu8cwCbJ3U1MyTSU8+Pedm5mVNKNRZ2pre0ARDtSFW06syr2n4LbB56lxhNYMabjOlVWtyImNRFJU6jENmhjMyMjIyMjIyMo4s7mpmeL8Yx0ltRJs+Z5kIrz3ekZ2xcrzdrRcWZZzDFDDqNODVJeXYZbGoNsPTQt9BzE4w9T55X++l2L5xtsYp2yzP0Yx1T9lqpu6lZMKyDlpn756Xp3Xes/IKVAPhp2zoNW/bH57szoNc65i3qONYm9LkpFjPVD8Cvg2hfYfaf3X6u45cqSbNlqPXLJs+GAxGGDOFMm9enWxdvbFn2TLvntpPEtoGK8seE+n1sWWEvYNG7hZ4Dq/e3GvlLHXkdkqr1RYmUwAAFFJJREFUur29HZXLXq8XrcPu7u5IuD2bp/1+N51/tFzKTUy+gSqzHkKoHK+sMmjr4IUy1LxZpsf0pnxF1IlR03a73dpaGSIzwxkZGRkZGRkZGUcWdyUzPO8M436wSHXYQ293pv/H7JfqwtulWtYhVU7K+7OpZ+gioI79dN02e+/f0wzE8i+KosIkeYd8eIyvV06sfppvKh1/1dPb1sc7GlzDEcVYNC+sUMpG2+tTbxzNq+ySUfQ8tYnYO/TeGz22NdScZYkUnkc5n/MOzLD3jh8/XglLxgMQimJ4AIGyQjZPe4Sup0EpiqKidWAw/xBC5Xhczz6SZSrLFtPeqL2m1pX193wFvBBcwN47idnA6rG0HjNs7UG1LXcLM8x2s79PnTpVyoT1dWm32+X707kwxlBq/ra/eCyw3vO0sd740eOh9V6v1yvzpB9Eys673W6XefA51ZZZjYKHOocmpeTFkzMemMF6xPKPsd8accN7pumce1cuhg8Kqc5OqbtTeY1bSFjE1BLetXFqrybtST2vH15rND+u/LttwZvCNOGKxoUAA6oypROHLXtnZ6cSlswzHfDiaY47mc3WOzaB7ezsJBeUrB8XKHqPbUxN7Pphs+nGbSJjSJmleGUfFjxzkwceeADA3sLA+4gDe4tILjxv3LgBYHSRVmfzpvJnNxNcYK6srFRUsWoeYE/XOnnyZKUOdMhcWVkBsPfBp7zevHlzpO5aV62fF9MV2JM5XrOy0+/3K4sF1sWLTa2Lfe8Db/uB41Fj3cZCrHnt0vk4FWKNSN1bNNh3xo3cfffdh2eeeQYAsL6+DmA0Ru0bb7wBYPgOdL7k36mNlVcHC5Vdu9kLIZQyVCcsXmqR6m3+2dbUnOuZf3jyRmgfsW84Fnu9XqWOHPu2TJtXbI5OmVTUWeBbLL60Z2RkZGRkZGRkZEyII80Mp3Zss8zP3puUBfZgVcYpZqbf7yfZriZlp/oopar30qV2m5PU7W7AuPbGNALqEJPK08rg7u5uyU5QRUjs7u5G31FRFJXQak3aoc95ajaVEcv8aZvJ+GhdPJUwsMfyxUJhdbvdivo0ZYIyrXnTYUDbCgA/8RM/gXvvvRdANXxdr9fD5cuXAQDvvPMOAOBrX/saAODKlSu4du0agOF8oupej21WphUAPvCBD5R1sQ5DrMPq6irOnDkDYMi4spzNzc1SXlXNTfDe2bNnAQDvvvsugCEbqP2hYB733HNPWXfKhedcZ0NdKtPnmRbxf8uCt1qtyoEx6ghqnUA9eSd0rrchONV8LTbmVBuz6LAM6rVr10qZ+OAHPwhgKD8XL17E6dOnR9JvbW2V75SmCfqeYiYqKU2takK9d2ev6dhsMt8MBoOyPZRdys3x48fLMWxRFEWFsa7LfHshK62pSp01SIp1176dxfybmeGMjIyMjIyMjIwji7tj23cHdXYHs0ozL+UQyhBY1kpZRMtEpOriGeWnWG19rm66o4y67W8qS6kDMlLgfS8E2azY+5TmIsVSKcjQKTzmwsqsMoZ03rAHc2goJFtXtQ217fHG3aLg+PHj+PjHPw4AeOKJJwCMzg8x+7vbt2/j7/7dvztyj0zsK6+8gitXrgDw2XPryLO8vFy+EzJup06dAgA8/vjjFTZWHYdYDlljlnf8+PGS/WM5L7zwAgDg0qVLlVBSIYSSJTxx4sRIP3ziE5/A8ePHR9qhh7iwrrz2D/7BPwCwx0DH5KHVapXl6Fxtj+9l//f7/YqdqnXmU3iHQdjDcOpq8e423Lx5E2+//TYA4OmnnwYw6izpHSevR8MDvi+FnYe8Y7y9frbagHa7XY4H2sdzbJ4+fbrM//nnnwewJ2dW/vUdK8Ot9Wu323j44YcB7NlRA8O5cWtrq/QXeO211wDsaWI0b4U39xKnT5/Ggw8+CGDUiRHYk/NXX311JA/KvHfgk86zKWfnpsjMcEZGRkZGRkZGxpHFXcUMp3AUWUivzdzBerutOjY5dXdesXSeLdRRfDeAz4jOki2exTMHgaY29GRAUkgdXatH3tL+WD22OTbIiihL4eVVF/Pa/8ePHy/ZJw/WvpptXllZwSc+8QkAe3aWwLCv3n333bL/CDKdQLUvtre3S0aKLLAysZQNMmjKFK+trQEYMntknk6ePFmJzPDoo48C2GOGLdSDn+WwTidOnCiZLJbz5JNPlmlYH0bc+MIXvgBgjz2PzateuKnt7e1KaDWNqmF9Q2xYMIWGmLNjgem1bjbN3RRajVCtz3vvvQcA+OIXvwjAt2Flf6+srJSyQDvy7//+7wewJyuPP/44gOE40CgKlImXX34ZwPCdqRaKPg/K3LLvP/3pT4/kubu7W4mAwbECwA0LR3hMqo3Sw3JOnz5dCQvnRYXytBJWbh599NFy/FhNXbvdLm2ayTzr/Grney8yDqHfklarNTLnjMORWQwvMlKq5VT6JhPZJIuwJiYQdQzvx6nQm9RzEZByDph1/jHMgwPYpJuucXVOObl5sWiZlh8FflT4oZq2PvOMJmpGTUPHu7feeguA79DlqTz5S+cdjQudcshp0pbl5eXyPfPDq8553slrbAfBhc+zzz5bcf6jicPy8nJlUcoFzJNPPlk6HHoqaqseP3HiBM6fPz9S58ceewzA3qL7/vvvL/8GgKtXrwLYk1Xmz2svvvgigFFTDTsWNJycXdRMEqt1UeCF+fNCkGlM3D/35/4cAODnf/7nAQz76/bt2+Ui+GMf+xgAjGwuaWJAcwwu/O67774ynY1ZvbOzU5FdzkMvv/wyvvGNb4yUp4tnhoXT96qOqiybbdYygeFiuCiK0nGVGz81DbIne25tbZXjhXkyr6eeeqpiSsJN7O3bt8u60xSE5ayvr5fpWT91ArWknt1AWmfwFLKZREZGRkZGRkZGxpHFkWGG95MBS+W5Xw5kMdXbLNrn5TUrdVnd0Cx17mX4aNJn89S/kzLlnuOdl4en2rNqQA9eSCOPxRxX58Pqa9s/rMf169cB7KkmreNP3fHOwPlkOBmGrd1uV04MvH79+kjINi0vNS80nTOIJqxQDHSy+va3v12aWPztv/23R9JoyEr+kvG7cOFChQ3XPvje975XeU4PhgCGob8++MEPlv3MX7LU77///shBH8AeGwfsOYuRgacaWkNmxd71YDBoxMgvAlKy5Knftb85D1hTw2PHjpXziJ6qRvAdkTUlI3ry5MkyfzKozEe1UTSB4Ls7d+4cfuzHfswtQ+vFvN57773yPsMj8r2+/fbbJVtMNla1ZXyOmg6muX37Nr7zne8AGI6z48ePV8Y1Zdg7YIZYWloq268niAKjIRdtuDaFHVubm5uuSWYKmRnOyMjIyMjIyMg4sggHyVaEEIqDCOK9H0zjPDFoKUzj4FbnWt3nYv01DfsHlCzMgXt1tFqtmcvuNM5ydxObPksnHebV6XRchyBgj4XRMEq2DjbklrIV1nEuFYxeURTFochuu90u1LlG4fUVbQP/0T/6R5V01kaw1WrhwoULAIDf/u3fBgC8+eabAPYc6Oig5IVjqtNv+21T3wTqaMQQUWq7aBlv9tX29nYpP/xNHcMeQijZ9g9/+MMAgL/4F/8igD0m0Tp1EpcuXSoPFGF/8wjq7e3t8jk6Xql9MP+2zDJlFgDW1tZeKIriU/Eemj1CCMVhOPDFvnFNZLCu7X3qwBP+TS0DHdA+/vGP49lnnwUwtCfXOY3vk3Jw48aN8hrZbdqVr62tlWwv5ZPyNxgMRo5LB4Y2/hsbG6VM6ZyoDocA8Mgjj5TtsSEQOUY2NjYqR72rfb21q9cDcwjLSN++fRuDwYBtryVEmRnOyMjIyMjIyMg4sqhFdYUQ/gcAfwVAAeBbAP4SgPMAvgjgXgAvAPiZoiimN9KaATyb17udEW4Kz56yDkuzHzv1OlEkJsU8y+6kx0nebTK5H7LleYbz2sbGhntwRxNMa886DrOS26IoKlECbD8ry/jSSy8BAH78x3+8TBuLNKHttHaxyioqi14ngkyde4cBtoeRAxSzjHbDPOjJz99er1eJ/PCtb30LAPD1r3+9tEX17HytdkBDZbFdqffbBPM859bBLMb0LOWBLCmZ1ddff72Sxjs8xRu3NkxiCimfIT3wwmsj2VzK7urqaiWkms4LzJ/Ms0atoAaGMuxFArIau1i9UhhrJhFCeAjA7wF4riiKzRDCvwTwbwD8GQD/qiiKL4YQfhHAN4ui+Cdj8joQMwlilkK9KJjFgmKeY0s2UTXPUnb3w0xC0XRRsEiLiLo4SNlt8uGf1AnWPnfHzGJsBWctt1RZ7gdiDoXqvLLfG4eDQFPZrNsub5FBJyzGrv3sZz8LYBiSC9hzmAOGC6RXX321VDVbM59Op1OGgSM0XjEXw+pUB4w6Bl65cqWWmcSs1wvz/C2qg1nKd6ovxhErB92PXKjqqZKsl43t3m63y3s07aGJh4KLYH6HO51OkjQrigLXr1+fuZlEB8BqCKED4BiAdwH8KIAv3bn/BQA/VTOvjIyDRJbdjEVEltuMRUWW3YyFw1iqqyiKt0MI/yuA7wHYBPBl7Kk5rhdFQf3bRQAP7VstZ4im6vd5OJTgoLDou3CLu01262LRZPag5G4/y2nqYJPCvMqtZ+KQYn/vBu3FpDIzC1kjQ0vVsZ7oR5MIssBFUYycymdhTZE8Jz4bOkzT18W8yu5hYT/mnHF5zsN3POVoP6lZZOq0RWIak7uxzHAI4R4APwngCQAPAjgO4E/VLSCE8LkQwtdCCF9rXLuMjCkwS9ldlI93xuIjz7kZi4osuxmLijpGkD8G4I2iKN4HgBDCvwLwQwDOhBA6d3Z7DwN423u4KIrPA/j8nWcPdEUxbicyq1ApB2UXtJ+Yh93kPmBmsttqtfZNdieRnzo76UV+pwdd92nZ9KLwD/6YEHMlt02c3uZJKzHv8u85PenftKlUxzheswc/nDlzpgyXpU6MwKhN5gH0ycKuF/YbKba07vUmeXuwcjCpE/e49Pbo8lOnTpXXfvRHfxTAqF0w01F2f/M3fxPAnrNzHdltMkdF61wjzfcAfDqE/7+9+wnRoo7jOP7+rNUht4O1IWL2Z2Ppahl1kS5SZIcsCNGTdKlDQd6KTh4SIiq6BYWCRCX9RaVLHTx0EnOTLMWy0HIxXRHSAony2+GZZxsen93n2XXmNzM7nxfIPs88zzrfZ/Yzz3535vf8RjeqU8064CiwH3gqe84WYM+8125WLmfXmsi5taZydq2RhhkzfEDSJ8Ak8A/wLZ2/3L4Adkt6JVu2o8xC66zuRyDaqg3ZrdORuCJUvS9VOUa0y7kt5v9ukn5Hv3ovQ5ufSqr3UtcjIyOzXlpc0lUXoOk3bVYR04G1IbvzNZ+jv8POGNF7ZFdzTIE436PG+Z9/7zR9w84I0zubxOjoKGvWrAGGG/vbHb/e7zmzvc5rtSivQNdrtte4WBqIIjTlF8hiuAJd7y++QTkcJqeLJctlf8itaPM5/Tzs1GpFKmJqtbneP4eZNm2uD9W1sRke1PB0G4iJiQng/yuQRcRMk9G7bS9fvjwznKJ3WqqRkZGhGohuk9K9Qlje9PR0a65AV7RUzfAwj/Uz1z45VzM8177fnWd4bGwMgPHx8Zmr0eWnVOvVfWzfvn1A/ynW8t8/6LWVMbWamZmZmdmik/rI8DTwF3A+2UqvzRiutSwLrfeOiLi16GIGkXQJOJ56vdegSXloS63Js+v33NI1qV5nt1xtyUIVSu8XkjbDANk0VUlPtyyUay2P6y1Xk+p1reVqUs1NqhWaVW+Tau1qUs2utTwp6vUwCTMzMzNrLTfDZmZmZtZaVTTD71SwzoVyreVxveVqUr2utVxNqrlJtUKz6m1SrV1Nqtm1lqf0epOPGTYzMzMzqwsPkzAzMzOz1krWDEt6VNJxSSckvZRqvcOQtErSfklHJf0g6YVs+TZJU5IOZ/8eq7rWLkknJR3J6vomW3azpK8k/ZR9XVaDOu/Jbb/Dki5K2lrnbdvL2S2Ws5uOs1sc5zYd57ZYzu4Q604xTELSEuBH4GHgNHAQ2BwRR0tf+RAkrQBWRMSkpJuAQ8ATwEbgz4h4vdIC+5B0Erg/Is7nlr0GXIiIV7M3kGUR8WJVNfbKcjAFPAg8TU23bZ6zWzxnNw1nt1jObRrObfGc3cFSHRl+ADgREb9ExN/AbmBDonUPFBFnImIyu30JOAasrLaqBdkA7Mpu76Kzg9bJOuDniDhVdSHz4Oym4ewWz9ktn3NbPOc2DWc3J1UzvBL4LXf/NDUNj6Q7gXuBA9mi5yV9J2lnHU4j5ATwpaRDkp7Jli2PiDPZ7d+B5dWUNqtNwIe5+3XdtnnObvGc3TSc3WI5t2k4t8VzdgfwB+hyJI0CnwJbI+Ii8DZwN7AaOAO8UWF5vdZGxH3AeuA5SQ/lH4zO+JfaTBUi6QbgceDjbFGdt23jOLvlcXbL1aDsOrc2o0G5BWd3oFTN8BSwKnf/tmxZbUi6nk6w34+IzwAi4mxE/BsRV4B36Zy+qYWImMq+ngM+p1Pb2Ww8U3dc07nqKrzKemAyIs5CvbdtD2e3YM5uMs5ugZzbZJzbgjm7g6Vqhg8CE5Luyjr+TcDeROseSJKAHcCxiHgzt3xF7mlPAt+nrq0fSUuzgftIWgo8Qqe2vcCW7GlbgD3VVNjXZnKnPOq6bftwdgvk7Cbl7BbEuU3KuS2QszucZBfdUGcqjLeAJcDOiNieZMVDkLQW+Bo4AlzJFr9M5weyms7pg5PAs7kxNpWRNE7nrzuA64APImK7pFuAj4DbgVPAxoi4UFGZM7Id8FdgPCL+yJa9Rw23bT/ObnGc3bSc3WI4t2k5t8Vxdodcb6pm2MzMzMysbvwBOjMzMzNrLTfDZmZmZtZabobNzMzMrLXcDJuZmZlZa7kZNjMzM7PWcjNsZmZmZq3lZtjMzMzMWsvNsJmZmZm11n9ths45VwJHIgAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x216 with 4 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from lucid.optvis.objectives import wrap_objective, Objective\\n\",\n    \"import numpy as np\\n\",\n    \"\\n\",\n    \"#create a lucid objective corresponding to advantage\\n\",\n    \"\\n\",\n    \"@wrap_objective\\n\",\n    \"def channel(layer, n_channel, ordering=\\\"NHWC\\\"):\\n\",\n    \"  \\\"\\\"\\\"Tensor-order aware version of channel lucid objective\\\"\\\"\\\"\\n\",\n    \"  if ordering=='NCHW':\\n\",\n    \"    return lambda T: tf.reduce_mean(tf.transpose(T(layer),perm=[0,2,3,1])[...,n_channel])\\n\",\n    \"  else:\\n\",\n    \"    return lambda T: tf.reduce_mean(T(layer)[..., n_channel])\\n\",\n    \"\\n\",\n    \"@wrap_objective\\n\",\n    \"def L2c(layer=\\\"input\\\", constant=0, epsilon=1e-6, batch=None,channel=0):\\n\",\n    \"  \\\"\\\"\\\"L2 norm of layer. Generally used as penalty.\\\"\\\"\\\"\\n\",\n    \"  if batch is None:\\n\",\n    \"    return lambda T: tf.sqrt(epsilon + tf.reduce_sum((T(layer)[...,channel] - constant) ** 2))\\n\",\n    \"  else:\\n\",\n    \"    return lambda T: tf.sqrt(epsilon + tf.reduce_sum((T(layer)[batch,...,channel] - constant) ** 2))\\n\",\n    \"\\n\",\n    \"@wrap_objective\\n\",\n    \"def direction_cossim(layer, vec, ordering=\\\"NHWC\\\"):\\n\",\n    \"  \\\"\\\"\\\"Visualize a direction (cossine similarity)\\\"\\\"\\\"\\n\",\n    \"  def inner(T):\\n\",\n    \"    if ordering=='NCHW':\\n\",\n    \"        _layer = T(layer)\\n\",\n    \"    else:\\n\",\n    \"        _layer = tf.transpose(T(layer),perm=[0,2,3,1])\\n\",\n    \"        \\n\",\n    \"    act_mags = tf.sqrt(tf.reduce_sum(_layer**2, -1, keepdims=True))\\n\",\n    \"    vec_mag = tf.sqrt(tf.reduce_sum(vec**2))\\n\",\n    \"    \\n\",\n    \"    mags = act_mags * vec_mag\\n\",\n    \"    return tf.reduce_mean(_layer * vec.reshape([1, 1, 1, -1]) / mags)\\n\",\n    \"    \\n\",\n    \"  return inner\\n\",\n    \"\\n\",\n    \"@wrap_objective\\n\",\n    \"def direction_neuroncossim(layer, vec, ordering=\\\"NHWC\\\"):\\n\",\n    \"  \\\"\\\"\\\"Visualize a direction (cossine similarity)\\\"\\\"\\\"\\n\",\n    \"  def inner(T):\\n\",\n    \"    if ordering=='NCHW':\\n\",\n    \"        _layer = T(layer)\\n\",\n    \"    else:\\n\",\n    \"        _layer = tf.transpose(T(layer),perm=[0,2,3,1])\\n\",\n    \"        \\n\",\n    \"    act_mags = tf.sqrt(tf.reduce_sum(_layer[:,5:6,5:6,:]**2, -1, keepdims=True))\\n\",\n    \"    vec_mag = tf.sqrt(tf.reduce_sum(vec**2))\\n\",\n    \"    \\n\",\n    \"    mags = act_mags * vec_mag\\n\",\n    \"    return tf.reduce_mean(_layer[:,5:6,5:6,:] * vec.reshape([1, 1, 1, -1]) / mags)\\n\",\n    \"    \\n\",\n    \"  return inner\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"transforms = [\\n\",\n    \"    transform.jitter(10),\\n\",\n    \"    #transform.random_scale([n/100. for n in range(80, 120)]),\\n\",\n    \"    #transform.random_rotate([n/1. for n in range(-5,5)]) # + range(-5,5) + 10*range(-2,2)),\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"pylab.gray()\\n\",\n    \"\\n\",\n    \"layer_idx = -3\\n\",\n    \"layer_name = m.layers[layer_idx]['name']\\n\",\n    \"\\n\",\n    \"print(layer_name)\\n\",\n    \"\\n\",\n    \"obj = channel(layer_name,60,m.channel_order)\\n\",\n    \"regularize =-0.0005*objectives.L1()-0.0002*objectives.total_variation()\\n\",\n    \"\\n\",\n    \"vec = np.zeros(64,dtype=np.float32)\\n\",\n    \"vec[60]=1.0\\n\",\n    \"#obj = direction_cossim(layer_name,vec)\\n\",\n    \"regularize =-0.000001*objectives.L1()-0.0000001*objectives.total_variation()\\n\",\n    \"\\n\",\n    \"obj = direction_cossim(layer_name,vec)\\n\",\n    \"regularize = -1e-6*objectives.total_variation()-1e-9*objectives.L2()-5e-7*objectives.L1()\\n\",\n    \"\\n\",\n    \"#regularize=0\\n\",\n    \"\\n\",\n    \"#regularize = -0.0003*objectives.L2()-0.125*L2c(channel=2)-0.0005*objectives.L1()-0.0005*objectives.total_variation()\\n\",\n    \"\\n\",\n    \"#param = lambda: only_current_frame([1,84,84,4])\\n\",\n    \"param = lambda: dope_image([1,84,84,4])\\n\",\n    \"\\n\",\n    \"out = render.render_vis(m, regularize + obj,\\n\",\n    \"                            param_f = param,\\n\",\n    \"                        transforms=transforms,verbose=True,thresholds=(1024,),\\n\",\n    \"                       print_objectives=[obj])\\n\",\n    \"    \\n\",\n    \"#now let's visualize the results...\\n\",\n    \"fig = pylab.figure(figsize=(12,3))\\n\",\n    \"frames = len(out)\\n\",\n    \"y=0\\n\",\n    \"for x in range(4):\\n\",\n    \"            num = (y*4+x)+1\\n\",\n    \"            pylab.subplot(frames,4,num)\\n\",\n    \"            val = out[y][0,:,:,x]\\n\",\n    \"            print(val.min(),val.max())\\n\",\n    \"            pylab.imshow(out[y][0,:,:,x],vmin=0.0,vmax=1.0)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 432x288 with 0 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 288x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"pylab.figure()\\n\",\n    \"pylab.matshow(out[y][0,:,:,3])\\n\",\n    \"from lucid.misc.io import show, save, load\\n\",\n    \"save(out[0],\\\"output.npy\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Validating that optimized image has desired effect (i.e. does actually activate a particular feature map)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_2\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import atari_zoo.utils\\n\",\n    \"import numpy as np\\n\",\n    \"out_img = np.load(\\\"output.npy\\\")\\n\",\n    \"\\n\",\n    \"algo = 'apex'\\n\",\n    \"m = MakeAtariModel(algo,env,run_id,local=False)()\\n\",\n    \"m.load_graphdef()\\n\",\n    \"#import importlib\\n\",\n    \"#importlib.reload(atari_zoo.utils)\\n\",\n    \"from atari_zoo.utils import conv_activations_to_canvas\\n\",\n    \"from atari_zoo.utils import fc_activations_to_canvas\\n\",\n    \"\\n\",\n    \"from lucid.optvis.render import import_model\\n\",\n    \"\\n\",\n    \"#get a tf session\\n\",\n    \"session = atari_zoo.utils.get_session()\\n\",\n    \"\\n\",\n    \"#create a placeholder input to the network\\n\",\n    \"X_t = tf.placeholder(tf.float32, [None] + m.image_shape)\\n\",\n    \"\\n\",\n    \"#now get access to a dictionary that grabs output layers from the model\\n\",\n    \"T = import_model(m,X_t,X_t)\\n\",\n    \"\\n\",\n    \"#print(session.graph.get_operations())\\n\",\n    \"\\n\",\n    \"import pylab \\n\",\n    \"\\n\",\n    \"rep_layer = m.layers[-3]['name'] #second-to-last-layer (representation layer)\\n\",\n    \"rep_layer_T = T(rep_layer)\\n\",\n    \"\\n\",\n    \"rep = session.run(rep_layer_T,{X_t:out_img})\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"rep_scaled = np.clip(rep,0,3)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<matplotlib.image.AxesImage at 0x7fbf5812d160>\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 432x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"canvas = conv_activations_to_canvas(m,rep_scaled,padding=1)\\n\",\n    \"pylab.imshow(canvas)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"1.8514978\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"#Check particular feature map we were maximizing (in this case 60)\\n\",\n    \"\\n\",\n    \"rep[0,60,5,5].mean()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"(1, 64, 11, 11)\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<Figure size 432x288 with 0 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 288x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"#Visualize that feature map\\n\",\n    \"\\n\",\n    \"pylab.gray()\\n\",\n    \"pylab.matshow(rep[0,60],vmin=0,vmax=3)\\n\",\n    \"print(rep.shape)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.5.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "notebooks/Filter Analysis.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"tf2onnx not installed, you will not be able to export to onnx\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import sys\\n\",\n    \"sys.path.append(\\\"..\\\")\\n\",\n    \"\\n\",\n    \"import tensorflow as tf\\n\",\n    \"import lucid\\n\",\n    \"import atari_zoo\\n\",\n    \"from atari_zoo import MakeAtariModel\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## First convolutional layer filter analysis\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This notebook demonstrates an analysis of the first convolutional layer filter weights across different deep reinforcement learning algorithms and games.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#the six algorithms currently included in the zoo\\n\",\n    \"algos = ['a2c','es','ga','apex','rainbow','dqn']\\n\",\n    \"\\n\",\n    \"#Let's have better titles\\n\",\n    \"title_dict = {'a2c':'A2C','apex':'Ape-X','ga':'GA','rainbow':'Rainbow','dqn':'DQN','es':'ES'}\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from atari_zoo import game_list\\n\",\n    \"from atari_zoo import analysis_subset_games\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"AsterixNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"#Load in models and weights for the game Venture\\n\",\n    \"\\n\",\n    \"game_idx = 2 #11\\n\",\n    \"run_id = 1\\n\",\n    \"env = analysis_subset_games[game_idx]\\n\",\n    \"\\n\",\n    \"print(env)\\n\",\n    \"\\n\",\n    \"weight_dict = {}\\n\",\n    \"for algo in algos:\\n\",\n    \"    for run_id in [1,2,3]:\\n\",\n    \"        tf.reset_default_graph()\\n\",\n    \"        session = atari_zoo.utils.get_session()\\n\",\n    \"\\n\",\n    \"        #make atari model for algo + environment+ run combo\\n\",\n    \"        local=False\\n\",\n    \"        m = MakeAtariModel(algo,env,run_id,local=local)()\\n\",\n    \"        \\n\",\n    \"        #load in model\\n\",\n    \"        m.load_graphdef()\\n\",\n    \"        m.import_graph()\\n\",\n    \"\\n\",\n    \"        #cache weights in this dictionary for future analysis\\n\",\n    \"        weight_dict[(algo,run_id,)]=m.get_weights(session,0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Plotting a selection of Conv filters\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"-0.7050736 0.4499853\\n\",\n      \"-0.19968036 0.21985775\\n\",\n      \"-0.2828679 0.26300716\\n\",\n      \"-0.66079605 0.32920772\\n\",\n      \"-0.7577713 0.80321676\\n\",\n      \"-2.2774427 1.8774911\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAjQAAAIQCAYAAACWtvQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXncVePax6/bQY5ZUlKopEioUClpMmTMECdDhsRxJMMxH4fMp/Me0+F1hCOZMp8yFikpTZSQiEhlCGXInOl+/1i713N9n9Veu546tXa/7+fzfPg9ez9733utda91t67f/l0hxmhCCCGEEHlmtRU9ACGEEEKIqqIFjRBCCCFyjxY0QgghhMg9WtAIIYQQIvdoQSOEEEKI3KMFjRBCCCFyjxY0QgghhMg9WtAshhDChSGEWPhpvJjnNAshXBJCGBtCmBtC+DGE8GEI4b4QQouM118nhHBGCGFkCOHTwt9+GUJ4MYRwZQihwfL5ZEIsOyrMkWI/HfA3m4UQrgshvBFC+C6E8H0IYU4I4fnCsb/VCvo4QlSZEEKjEMK1IYSXQwifhxB+Kvx3Ygjh6hDCTkX+du3CdSCGEAb9N8ddDgQF61UmhBDMbKaZbWlmwcyuiTGenfK8CWbWyswmm9lEM/vGzJqZ2V5m9rOZ/SHG+J+Uv2ttZg+bWR0z+8DMRpjZR2a2jpk1N7M2ZvarmbWOMb68rD+fEMuKEMKiE8ilRZ42MMY4q/D8pmb2vJlVN7OpZjbWzD43s5pm1tLMdjCzE2OM/15eYxZieVC4blxc+FnNzF42sxctOb7Xs+TY3tXM1jSzU2OMN6W8xvFmNsDMopn9aGZ1Yoyf/Vc+QBmgBU0KIYS9zWyYmQ00sy5mtrolB9aPeF4fMxsaY3wHvz/KzO4xs8/MbLOKfxdC2MaSxc+6ZvYXSxZLP+Pv65vZ383sXzHGUcv0wwmxDFm0oIkxhhKf/6yZdTazS2KMlRZBhTuTa8YYpy/TgQqxnAkh9DWzS8zsfTM7IsY4NuU5Nc3sDDP7JsZ4Vcrj4y1Z2F9tZuea2VkxxmuX57jLCS1oUgghPGxmh5pZWzM7xMzOMrPuMcYHluA13jazrc1s5xjj5Aq/H25me5jZ32KMf8l4jWoxxoVL8RGE+K+wFAua78zs92a2UYzxy+U5NiH+WxQW4m9Zcme9RYxxWsbzV0/5h2xTS+5aDjez7mY218zejTE2WT6jLj/koQEhhFpmdqCZvR1jHGfJXRozs5OW8KV+Kvz3/w/awp2XPczsBzP7n6wX0GJGlCGLbp83WqGjEGLZcrwld/IfzlrMmJlxMVNg0TVmYIzxczN73My2DSG0W3bDLG9WX9EDWAk53szWsMJCJsb4eghhspl1DCE0ZHkpjYJHpomZfWhmr1d4aLfCfyfrX6einAghXLKYh36IMfaroB+w5I7nYyGEm83sOTN7Jcb41XIeohDLk7aF/45cmj8OIaxlZkeb2QIzG1z49UBLKgUnmdmYKo5vlUALmgoUTF29LLlteFeFhwaa2U5mdqKZnZfxGtUr/O2ZMcZfKjxcu/DfD5bFeIVYiei7mN8vMLOKC5oLzWx9S/7hcEnhJxZKtMPM7IYY48zlN0whlgubFv77IR8IIdQzs+Pw6y9jjNdX0IeZ2UZmdmuM8fvC74aZ2cdm1i2EcFqM8YtlOeByRCUnTycz28rMhscYKx6YgyxxnB8XQlhjcX8cQljHzB61xDvzPzHGh5bnYIVYWYgxhsX8bIjnLYwxnmRmdS05yd9syTdBGprZ6Wb2eghh///2+IVYjtSzZMFf8ecMPGdRuemORb8olKXuNbO1zKzHch9lGaAFjef/a5gVf1mhnlnTzLqm/WFhMfOkJWWla2OMaXdy5hb+W2dZDFaIvBJj/CTGeGeM8ZQYY2tL5ta/LTEMDwghrLliRyjEEvFx4b+b8YEY46hFC3xL7AyOEMK2llw3pscYJ+DhgYX/nrgMx1q2aEFTIISwiZkdVJD3MRzMklqmWYo5OISwnpkNNbP2ltyZOWsxb/NC4b87hxA2WIbDFyLXFP7R8Eczm2Nmm5hZ0xU7IiGWiEVf0e68FH+76JqyTcp1Z2rhsaYhhDZVHmWZIw/NbxxrSeDRZDN7ZTHPOdDM9ggh1I8xvmdmVliYDDOz1mZ2ZYzxr4t7gxjje4Ucjj3M7BwzW+xzC6+tr22LVYYY468hhG8LsqSvgQuxkjDQzM63xO9yRYzxzVL+KIRQzZJy0q+F10jLUalrZntbcpdm3LIYbLmiHJoCIYS3LPkqaasY44uLec7llixCrooxXhhC2MjMnjGznc2sb4zxshLeZ1szm2BJsN65ZvbPlDyCLSz5Wnd/BeuJlZmlyKHpa2Z3LkoOxmPdzOxBM/vSzGprMS/yRIVgvdlmdmQh9oPPqWFm88xsdoyxXgjhSEt8MkNjjPsu5nXXtyRJPlgS1LpgOX2E3KMFjZkVes08Z2ZTY4w7FHlePUtaInxsZltYEoDUwczetSQZOI0hMUZ3xwetD9433/pgR0u+AhgtaX0wZek+lRDLnxJbH/z/HAghfGlmG5jZFDObZMnJfQMza2FJLPzPZnZUjPHB5TZoIZYDhW/J9jWziyyxc0y231ofbGiJOXgPM6tmZnfHGI8JIYyyxKpwaFqbnAqvfYclJvrUlgkiQQsaMwsh3GtmR5rZ6THGGzKe+4yZ7WlJgvB1lvR7KsbxMcaBKa+zriW3EA80s+0s+cred2b2jiV3fW5dVNYSYmWlwoKmGP8/B0IIu5nZPpacxLcws1qWLGI+MLPRlnxte+piXkeIlZ6QNDM+2cw6WrKIWcfMvrbkH74vWLKYeTmE0MiSdOFPzGzzGONP6a9oVvDPjDWzV2OMzZbvJ8gvWtAIIYQQIvfoW05CCCGEyD1a0AghhBAi92hBI4QQQojcowWNEEIIIXKPFjRCCCGEyD1LlBRc4lc0hVgiSg1lWxnRnBDLA80JITylzAndoRFCCCFE7tGCRgghhBC5p0rNKe+++26nf/rJBx1+8803Tr/99ttOt2vXzulNN93U6c8//7yoPuGEEyqN6d577y0yYrP58+c7/fLLLzu91157Ob3xxhs7vdFGGzk9Z84cpw877DCnb775ZqerVavmdM2aNZ2++uqrnT7rLN+4e/XV/S5bYw3fjf7jjz92+uijjzby4IM+Vb5FixZOr7feek737t3b6cMPP9zpDh06OP311187PXv2bKc7depUaUzlwnnnnec099dqq/l/Q8ycOdPpl156yem+ffs6PW3aNKc//fRTp//9739XGtOECROcvuce36WDx/C++/qWMuPG+ZY0DOPcbLPNnOY8ve2225z++9//XnQ8DRo0cJpz8ttvv3W6bt26Tj/99NNO//rrr07zvGVmdvnllzs9adIkp7t06eI0590zzzzj9EknneQ0X//YY491umfPnpXGVC787W9/c5rnh7feesvp+vXrO83997vf/c7prbfe2mnOib/+tXIP4I4dOzrdsGFDp3fbbTenhw8f7vQBBxzg9IgRI5zmdeDZZ591mnOA5w1uozp16ji94447Os3j8dVXX3V6wQLf/olz+rnnnjNy4YUXOs15P2PGDKcPOeQQp2+99Vanmzdv7jQ/Ex9fmuuE7tAIIYQQIvdoQSOEEEKI3KMFjRBCCCFyT5U8NJ988onTrHWuv/76Tm+44YZOsxbO2vs666zj9Pfff585plmzZjnN2uK6665bVH/55ZdOs17LOiI/I3n33Xedbtq0qdO//PKL02uttZbTX3zxhdP0txBu4zTeeOMNp+lZoKeC3ibWqH/44Qen6QNZlbjzzjudpn9gwIABTrN237VrV6fpsWFtnds+jdNOO83pv/zlL06PHz/eac6zH3/80elWrVo5/fvf/95perLooalVq5bTPXr0cPq7775z+tFHH3X61FNPdXry5MlOb7PNNk5PnZrdvJvzuH379k6fccYZTvfr18/pNm3aOP3OO+843bJlS6fp3Stn6Fukf4U+s/fff9/p2rVrO01PGI83ejXToG+HPi16XugrGzlypNN//OMfnR46dKjTvJaRjz76yGn6fm655RaneV7gnN1kk02c5vHYunVrp9M8NM2a+abe9KfymJ8yZYrTvXr1Kvo4r4304i0NukMjhBBCiNyjBY0QQgghco8WNEIIIYTIPVXy0LAuyDog/Sus49FPQv/IV1995XQpfoG1117badZn+ZrMSGH+AHND6GnJ8vXQI7P55ps7TU9EjRo1nGb9mH4GZv9wvGmwvtqoUSOnmWHA/cJtSt8RPRLc5uUM68rXXXed03369HGafgHmS8ybN8/pzz77zGlmNzDTxczsggsuKDpG+no4h+iZoUfh559/dnqDDTaoNIaKPP/8805vueWWRV8v63hiBsz555/v9CuvvFJ0PGaVtzP9gPvss4/T9A3RH8DzAucYX7+coa+P+4NeSu7vY445pujrMXuLx2sazEihL5AZKU899ZTTO+ywg9Nz5851mte2N998s+h4jjzySKd5njjllFOc5hw66KCDnKbvjNcV5uqk8dhjjzl94oknOn3//fc7zWsbt+kWW2zhNPc7x7w06A6NEEIIIXKPFjRCCCGEyD1a0AghhBAi91TJQ0N/CP0crDOzD9KHH37oNGvj7NFCv0kaHAP9HqzP0pPC57P2yDFzGxDmxvDv+XhWrg39Ceztw8+TBvt60DNDrxLryQsXLiw6pokTJzqdlcFQTjBzo3Hjxk4ze4EZKtWrV3ea25a1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rdjRCCGEWFFU6OW0iB8t+UfAbEt8W49YEuz4a5HXqG5mfSwx6m9tSWDqIq4wsytijAtT/m6WJd/4WyOiz1Ph8XH2W2zIKt3LaVX62rYQQgixxMSUb6AuxWt8bknrmkUNLi2EcHFBb21JSSrt7+plvG6bqo6tXNCCRgghhFgBxBgvCyE0tORbeD+EEI6PKpssNVrQCCGEECuOXmb2hiWBek0t+QKJWArkoRFCCCFE7llVgvWEEEIIUcYsUckpxektRJVZFoa7FYXmhFgeaE4I4SllTugOjRBCCCFyjxY0QgghhMg9VfqW02OPPeb0F1984fQmm2ziNA3I3333ndOzZs1yerPNNnN63XXXdbpr166ZY5o/f77TO+64o9Offvqp07/73e+cHjFihNMtWrRw+scff3S6R48eTj/yyCNOr7WW7wzP91uwYEFR/e677zq90047Ob3RRhs5veeeexoZOHCg03Xq1HH69ddfd7phw4ZOc7+efPLJTl922WWV3rMiBx54YNHH88yZZ/r+j2uv7Rtcr7aa/zcE9+8aa6zh9M8/+2iKhQt97lb16r7h+lVXXVVpTKeccorTm27qG1b/9NNPTv/www9Or7POOk6/8cYbRV9vu+22c/qPf/yj07169XK6Rg3fW2+DDTZwmp+R541q1ao5zTnJ8w73kZnZhRde6PT666/v9DfffOP0559/7jS3Aef56qv7U+17773n9A033FBpTOXC9ddf7/Qvv/xS9Pnff/+905xDPD55XQjBVyb69OlT6T2uueYap3/91efhcX/xmOLxwDFyznAe//nPf3b673//u9PcRhtu6Ptachust956TvP45BznnDnnnHOMcL9xu3799ddOcz/wPbmN+PccU9o8zUJ3aIQQQgiRe7SgEUIIIUTu0YJGCCGEELmnSh4a1ulYd6QfgB4b1pnpzeDzWaNL46uvvnKatdGPPvrIadYi6WlhHZC1VNbaybx585xec801nabnhePZeuutnZ4+fbrT9DN06NCh6HjMKvuGatas6XTt2rWd/vDDD4s+3r59e6c//vhjpzfeeOPMMZULPIa5P3k8UtM3xro1/QV8/TR4DNEX1rlzZ6dfeeUVpxs1alR0TPT10OdFWrVq5fTTTz/tNOc9zyOcg/Qb7LDDDk7XqlWr6HjMKvts6HXieYDbgPV/7ifO+1WJLE8Tjx9C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\\n\",\n      \"text/plain\": [\n       \"<Figure size 720x648 with 6 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from pylab import *\\n\",\n    \"idx = 0\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"figure(figsize=(10,9))\\n\",\n    \"\\n\",\n    \"#loop across algortihms\\n\",\n    \"for algo in algos:\\n\",\n    \"    subplot(231+idx)\\n\",\n    \"    \\n\",\n    \"    #turn off ticks\\n\",\n    \"    plt.tick_params(\\n\",\n    \"    axis='x',          # changes apply to the x-axis\\n\",\n    \"    which='both',      # both major and minor ticks are affected\\n\",\n    \"    bottom=False,      # ticks along the bottom edge are off\\n\",\n    \"    top=False,         # ticks along the top edge are off\\n\",\n    \"    labelbottom=False,\\n\",\n    \"    left=False) # labels along the bottom edge are off\\n\",\n    \"    \\n\",\n    \"    plt.tick_params(\\n\",\n    \"    axis='y',          # changes apply to the x-axis\\n\",\n    \"    which='both',      # both major and minor ticks are affected\\n\",\n    \"    bottom=False,      # ticks along the bottom edge are off\\n\",\n    \"    top=False,         # ticks along the top edge are off\\n\",\n    \"    labelleft=False,\\n\",\n    \"    left=False) # labels along the bottom edge are off\\n\",\n    \"    \\n\",\n    \"    #plot conv weights\\n\",\n    \"    atari_zoo.utils.visualize_conv_w(weight_dict[(algo,1)],title=title_dict[algo],subsample=6)\\n\",\n    \"    \\n\",\n    \"    idx+=1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Do networks pay more attention to the present than past?\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Can we quantify how much different networks are paying attention to different input frames by looking at weight magnitudes of input-channel filters?\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import collections\\n\",\n    \"import numpy as np\\n\",\n    \"\\n\",\n    \"\\\"\\\"\\\"\\n\",\n    \"This function looks at how the magnitude of filter weights is distributed across the temporal axis \\n\",\n    \"of the weights (i.e. the four input channels in Atari are frames nearer and nearer to the present).\\n\",\n    \"\\\"\\\"\\\"\\n\",\n    \"def calculate_temporal_lean(w):\\n\",\n    \"    intensity = (w**2).mean(axis=(0,1,-1))\\n\",\n    \"    return intensity\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"AmidarNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Amidar/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Amidar/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Amidar/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Amidar/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Amidar/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Amidar/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AmidarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AmidarNoFrameskip-v4_3\\n\",\n      \"AssaultNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AssaultNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AssaultNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AssaultNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AssaultNoFrameskip-v4_2\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Assault/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Assault/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Assault/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Assault/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Assault/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Assault/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AssaultNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AssaultNoFrameskip-v4_3\\n\",\n      \"AsterixNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asterix/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asterix/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsterixNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsterixNoFrameskip-v4_3\\n\",\n      \"AsteroidsNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsteroidsNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsteroidsNoFrameskip-v4_1\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsteroidsNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsteroidsNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asteroids/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asteroids/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Asteroids/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asteroids/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asteroids/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Asteroids/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AsteroidsNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AsteroidsNoFrameskip-v4_3\\n\",\n      \"AtlantisNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/AtlantisNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/AtlantisNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/AtlantisNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/AtlantisNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Atlantis/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Atlantis/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Atlantis/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_3\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Atlantis/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Atlantis/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Atlantis/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/AtlantisNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/AtlantisNoFrameskip-v4_3\\n\",\n      \"EnduroNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Enduro/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Enduro/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Enduro/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Enduro/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Enduro/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Enduro/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/EnduroNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/EnduroNoFrameskip-v4_3\\n\",\n      \"FrostbiteNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/FrostbiteNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/FrostbiteNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/FrostbiteNoFrameskip-v4_2\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/FrostbiteNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Frostbite/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Frostbite/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Frostbite/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Frostbite/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Frostbite/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Frostbite/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/FrostbiteNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/FrostbiteNoFrameskip-v4_3\\n\",\n      \"GravitarNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Gravitar/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Gravitar/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Gravitar/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Gravitar/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Gravitar/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Gravitar/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/GravitarNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/GravitarNoFrameskip-v4_3\\n\",\n      \"KangarooNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/KangarooNoFrameskip-v4_1\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/KangarooNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/KangarooNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/KangarooNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Kangaroo/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Kangaroo/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Kangaroo/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Kangaroo/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Kangaroo/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Kangaroo/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/KangarooNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/KangarooNoFrameskip-v4_3\\n\",\n      \"SeaquestNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SeaquestNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SeaquestNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SeaquestNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SeaquestNoFrameskip-v4_3\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Seaquest/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Seaquest/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Seaquest/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Seaquest/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Seaquest/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Seaquest/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SeaquestNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SeaquestNoFrameskip-v4_3\\n\",\n      \"SkiingNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Skiing/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Skiing/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Skiing/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Skiing/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Skiing/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Skiing/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/SkiingNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/SkiingNoFrameskip-v4_3\\n\",\n      \"VentureNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/VentureNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/VentureNoFrameskip-v4_2\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/VentureNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/VentureNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Venture/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Venture/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Venture/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Venture/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Venture/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Venture/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/VentureNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/VentureNoFrameskip-v4_3\\n\",\n      \"ZaxxonNoFrameskip-v4\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/a2c/checkpoints/ZaxxonNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/es/checkpoints/ZaxxonNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_3\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/apex/checkpoints/ZaxxonNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Zaxxon/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Zaxxon/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/rainbow/Zaxxon/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_3\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Zaxxon/1/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_1\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Zaxxon/2/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: gs://download-dopamine-rl/lucid/dqn/Zaxxon/3/graph_def.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/rainbow/checkpoints/ZaxxonNoFrameskip-v4_3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"#first gather / calculate results\\n\",\n    \"algo_sum = collections.defaultdict(list)\\n\",\n    \"result = {}\\n\",\n    \"\\n\",\n    \"#loop across games\\n\",\n    \"for env in analysis_subset_games:\\n\",\n    \"      \\n\",\n    \"    print(env)\\n\",\n    \"    \\n\",\n    \"    #loop across algos\\n\",\n    \"    weight_dict = {}\\n\",\n    \"    for algo in algos:\\n\",\n    \"        \\n\",\n    \"        #loop across runs\\n\",\n    \"        for run_id in [1,2,3]:\\n\",\n    \"            \\n\",\n    \"            tf.reset_default_graph()\\n\",\n    \"            session = atari_zoo.utils.get_session()\\n\",\n    \"\\n\",\n    \"            try:\\n\",\n    \"                #make atari model for algo + environment+ run combo\\n\",\n    \"                m = MakeAtariModel(algo,env,run_id,local=False)()\\n\",\n    \"        \\n\",\n    \"                #load in model\\n\",\n    \"                m.load_graphdef()\\n\",\n    \"                m.import_graph()\\n\",\n    \"\\n\",\n    \"                #load in weights\\n\",\n    \"                weight_dict[(algo,run_id,)]=m.get_weights(session,0)\\n\",\n    \"                \\n\",\n    \"                #store analysis result\\n\",\n    \"                algo_sum[(env,algo)].append(calculate_temporal_lean(weight_dict[(algo,run_id)]))  \\n\",\n    \"            except:\\n\",\n    \"                print((algo,env,run_id),\\\" failed\\\")\\n\",\n    \"        \\n\",\n    \"        #average over runs for one algorithm\\n\",\n    \"        result[(env,algo)] = np.vstack(algo_sum[(env,algo)]).mean(axis=0)\\n\",\n    \"        \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 864x360 with 6 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from pylab import *\\n\",\n    \"#now, plot for each algorithm create a bar chart summarizing the results\\n\",\n    \"r_norm = {}\\n\",\n    \"\\n\",\n    \"#normalize by the last frame (e.g. let last frame have \\\"1.0\\\" as reference point)\\n\",\n    \"for key in result:\\n\",\n    \"    r_norm[key] = result[key]/result[key][-1]\\n\",\n    \"    \\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"#now average over all the games for each algorithm\\n\",\n    \"avg_intensity = {}\\n\",\n    \"for algo in ['apex','rainbow','dqn','a2c','es','ga']:\\n\",\n    \"    arr = []\\n\",\n    \"    for env in analysis_subset_games:\\n\",\n    \"        intensities = r_norm[(env,algo)]\\n\",\n    \"        arr.append(intensities)\\n\",\n    \"    avg_intensity[algo] = np.vstack(arr).mean(axis=0)\\n\",\n    \"        \\n\",\n    \"        \\n\",\n    \"#make the bar charts\\n\",\n    \"fig = figure(figsize=(12,5))\\n\",\n    \"idx=0\\n\",\n    \"for algo in ['apex','rainbow','dqn','a2c','es','ga']:\\n\",\n    \"    ax=subplot(231+idx)\\n\",\n    \"    ax.bar(x=range(4),height=avg_intensity[algo])\\n\",\n    \"    ax.set_xticks([0,1,2,3])\\n\",\n    \"    ax.set_yticks([0,0.25,0.5,0.75,1.0])\\n\",\n    \"    ax.set_yticklabels([0,0.25,0.5,0.75,1.0],fontsize=15)\\n\",\n    \"    ax.set_xticklabels(('T -3', 'T -2', 'T -1', 'Now'),fontsize=15)\\n\",\n    \"    ax.set_title(title_dict[algo],fontsize=20)\\n\",\n    \"    idx+=1\\n\",\n    \"    \\n\",\n    \"fig.tight_layout()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The gradient based algorithms in general seem to favor the present over the past; interestingly the trend is not present in the evolutionary algorithms.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Making videos of rollouts\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import moviepy.editor as mpy\\n\",\n    \"from moviepy.video.io.ffmpeg_writer import FFMPEG_VideoWriter\\n\",\n    \"from IPython.display import clear_output, Image, display, HTML\\n\",\n    \"from lucid.misc.io.serialize_array import _normalize_array\\n\",\n    \"import numpy as np\\n\",\n    \"from atari_zoo import MakeAtariModel\\n\",\n    \"from atari_zoo.utils import MakeVideo\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: /space/rlzoo/a2c/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 a2c 1\\n\",\n      \"Model path: /space/rlzoo/a2c/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 a2c 2\\n\",\n      \"Model path: /space/rlzoo/a2c/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 a2c 3\\n\",\n      \"Model path: /space/rlzoo/es/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 1\\n\",\n      \"Model path: /space/rlzoo/es/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 2\\n\",\n      \"Model path: /space/rlzoo/es/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 3\\n\",\n      \"Model path: /space/rlzoo/ga/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 1\\n\",\n      \"Model path: /space/rlzoo/ga/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 2\\n\",\n      \"Model path: /space/rlzoo/ga/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 3\\n\",\n      \"Model path: /space/rlzoo/apex/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 1\\n\",\n      \"Model path: /space/rlzoo/apex/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 2\\n\",\n      \"Model path: /space/rlzoo/apex/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 3\\n\",\n      \"Model path: /space/rlzoo/rainbow/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 1\\n\",\n      \"Model path: /space/rlzoo/rainbow/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 2\\n\",\n      \"Model path: /space/rlzoo/rainbow/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 3\\n\",\n      \"Model path: /space/rlzoo/dqn/MontezumaRevengeNoFrameskip-v4/model1_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 1\\n\",\n      \"Model path: /space/rlzoo/dqn/MontezumaRevengeNoFrameskip-v4/model2_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 2\\n\",\n      \"Model path: /space/rlzoo/dqn/MontezumaRevengeNoFrameskip-v4/model3_final.pb\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"env = \\\"MontezumaRevengeNoFrameskip-v4\\\"\\n\",\n    \"\\n\",\n    \"for algo in algos:\\n\",\n    \"    for run_id in [1,2,3]:\\n\",\n    \"        tf.reset_default_graph()\\n\",\n    \"        session = atari_zoo.utils.get_session()\\n\",\n    \"\\n\",\n    \"        #make atari model for algo + environment+ run combo\\n\",\n    \"        m = MakeAtariModel(algo,env,run_id,local=True)()\\n\",\n    \"        video_fn = \\\"%s-%s-%d.mp4\\\" % (algo,env,run_id)\\n\",\n    \"        MakeVideo(m,video_fn=video_fn)\\n\",\n    \"        \\n\",\n    \"        print(env,algo,run_id)\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div align=middle><video height='400'src='data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQADKyZtZGF0AAACrQYF//+p3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0OCByMzMzIDkwYTYxZWMgLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE3IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NyBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MjUgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAAk8ZYiEACv//vZzfAprbbCVLgOzwMX7UAYLWbBJVQHZp7YhCwmcP0TMqVYeLo+Ca1ww85jdQy7iBpFrt8AhVDqPx/GPNSU83UDQ0i16Cyo/d0Xtp5nqeIdv3Y8hgt7FrY1nmLBAPf8JEFROeicfY/H8Y80tClMQ0GRa9BZUpdsfj+KekPdJSAi4xTsJfRV8rS2wYDEUSOuPqigD2QO/Gud/2h2vg1VzQEzXbsOcL1HNEEU8VUXSu7Petl/8Hi5HozHIBnJ7pgMamObW1JCgH4dcV6q60Gp1BwsLn1zPs5AvIEolKi/q2jHQKRORGwePXEEbW56I98SDUlCMPwKMMkulayl1H66T/ud82ug7xwL9exvJ6645onAivinqCgJBpBeHY1sR1FKXU6WI5+gBWTCROrZaySoLDCrktCHdEHZsLSEyyHlJDA8iwyH9tHRSngqKBFGGjkJM+0V8BVrFHj8jtvP/yNQ3e7PscjrJ30OhJR5iB1TbHWX/kr//IcsQfc5shLcpSn/K/LZdCud+OQiJUcYSz9HvF/I7BvlLtDNRciZ5gaaJUz/vCfrl3v6XJIAyePcUozoOO2dvy2pAWCoScZICWTadA1jf9yySnKJGkq3kdLlu3qyJ+k2eI8B+EKRlGftswqdvfsRPQI/K7Rcvc2X03q/6ELzovRQRKgvAj7zHmdUrL1E74MlbnGBNzm8DL9RVR3tuLiWVtJ0PGtGJvPLYcSObwrjVrQIRN/5MOMpRS87fBl5u1sELxcGqYiWhU/4H1707bDagIrg3hhjrL2PuaYGLnwunG7E+g0ds1YlE0GinAoXUXq30j+WeBdGvuTkBKhVrBQ0FEankUViHoidAaY9+/PgqtjPnDHhaNiXYMggAOBgEoEcTG3G3RfRJBw7z9wnxK7s+qlea22IPURCwl0ioOgFSCVUfvyHdvgqA6VcJiul9PtOfu06+AIFEtm/qYPnpohG9HXoDKCqSpBWQjV+OddXdkds4DSMAilvmr6JGp0NdCurXABcvtVbyMFK8VlwyKK1HExDf+gILHgd5HPR315t/EaV1t6MJbaNV04Kysl4BXmeuWbpzuE2dtA2kayQAMT4eHItz/kg8oPSxTrBvHreM/eRAPShiPXKbaI2QCcpXvkPH0dNE39OUJlMNgW5oWCIKv68H2Phj9xsTFiK/QS77HioGv4FD8zPIyqCgPbN4NRg4f7YYVYzZ7ZtfBRSYmUabLLoEsgyQWtf0eOGv5H6xaAVl+nLhCuCVek3aFMv27KODTIEP0fgglEO1zP28YY118XjO8CtuQ6NQHw4qG6OrMVNO+UaDZs8ldOnCq8T6BaM9+wztkf/itNqDwC5J9kBlezhOadWVM8PdwYdqKHo/9lTiROiaHew4noh1jQs1npUlCmrqy2+qyg8judHB+nV1gvhSpQObHnNZ03D9eWxYtlTILEuxWqeqnt6ein2LGo9GjhpZvKiPw8MWFsaW0HP1zpp/HwPaEve5It7bjxjR8O4WUn/mG/lxzbRbju9+8gO5fv/3rbm4rUOTAd1r7+yWVBEsDYWucFu/4BzXzUyzOed4NzwUdDxWYjXLwsQT3P8QUrs5IMrt6V3AtsfXQdTqQq/YLd7+hOQQzjk6Ya5XAwXs735oTTYYDZxbA9DKtx+FtHDheRACMG9QM8V1E6FKt5qxymIz7Ek3RrwvAE02kdH80xlmvVzXjyYY7Hfv7XGRKXrHPn8NRY2456ERWiE+4YDhRMOLgjH6NaUbGK8uXkU6+5JjY7pjxU1ePfK/DxEiYMujj+mK51/cuSUiKgV0md7H+cOZYKaYqWWAVzRAjQEXXMXwZrPqrsG6XsPs6xO9OxoTovVxLRzHttCNba3ZCrQEDKgyaZjNmTG9MhG/zkmx0AN71u+FwiH4nfX8pbQyTZf4sHCdpqH7Z+P7RYknHMvo6tb4LnhYRfojgc3pWz0PZMOhXzrsWX8mRyGkqzZBo4ZMLJFOVsaK5WqwMu2GnxkIHda3jjiXfvBNFdpuHgWYnSWgi7Ep0724EfzG7WmjwaFkZ7mfnpQEXVCMkdnUnA8bhu8fSJG+jeox0Uyo+BdY+Xr/fQUtf+j2xc2R3qaVVlzbcNaDALFpOu6fHlNquUaptxf1yb47ZeWLpqeor/VGBjlAoWYDyEuY8/GFV3ouId3gNiqgFHhOUlU3Fj2Pw3yo49QVavUtNVFo3RVfytbKCal0r67GC9gg//6ZmZnKGPLFkVlJhAd3FjR3+iW0hs5WbECwbbyMApOoZYukJ5huvWNfp0TMrKWMvlQTB23n+UaGxW1I+xWLTUs9HGqlVMNvMcsCxJufVAfpL45vrL4sXl5M0MZMiSwM9suPLQnamDfGQkbWwYbT7d6ruVkmyZ3g2phwMR47LJpbiDBemb94w9JZL0z3XE/+sQsNJyLKfd3wUo2F6pc8rI2oQ0vhEM6sHaQzEK2UJPLKIme9AwxgZPuvFO5po69fDZXNa+F4TS/NDOqVMjKJPCrb8b73Whc0x6lS5I0qkn4NB8xnQcsHyPjJvk0aSyjWQJ+oFWS9/TgIsDi7aG8sYnQ8kLESsh5GIG18zzlgI7lPpGu4q79CKL95NVuJFOcMzNHij7G/T9zWqF4ueb2JmYovO2VziknQJxg53Nm3jtziMEYL/UQtzJCOhUiIry8miABY/G+20MGlD2cf+0IUgdAsxGIPwTpciOXnDDgRUTaWeUiXNi+Mrqn//6lnzSVJBnKFwhdFMsCkExH6l4IYSuGS0B/u0J7Or5PTiDcZx17RMbO2HBLEP65UihOWzbkDIPMAmprRb3OGr5Wn1CF85ck/7tpg3uUSULLDcYUcgRiC2ISpy4CKgZspIJLSj/PKl215Cb2d2S2pyhN9mhWy5e3TqdSsSudg3BpC9R2TvJ+iNA3umEgtE8c3q1xIUxxtyFvrfzi1Ki6pHSt2kVQrJNOW9xfmR5hTwrhYCLcSxAUSoY2KGmNhmUM98P6PGXEHFxxC4kQIL1X/lYIk9v4Lm4YP35sGEGMDGUpFmnVybzeO+WuaCSYe5JbrhNFU6hR8ayUiWDq43LoPCc/kSLDHJHXku6pnUFTZIIaZjqFOMXb7PENGDrJRHBf788VxoJlHKGb+g3EKp0PSyZlEL5AN/8qoZN8LCELhAAABC0GaI2xCv/44h1nVygtJf/CGN+gBB+qRaoHRf98bYcKiKeSETiKC9LBsKKmHTiRWVed+A6V1qJ63ZywGxaCjElcZCmG7bo/6cLHscSmqMb8+R/SqZf9M1QIA1q/2SXIpdjjCn9hrDRa+KUvdDd7vLIs41mRfdp7BJ1Fj16ooKaXPJxQV7wAph66KdZ8mDtWJgHLk/N7wzJA7osBYK6eq9+UqLSlzjTFXk3DkFrivKdLeTpay7K9DD4HeHdksHgaZRKqXzaQf0XOUIfAUE9hlFtENPdyUCHD1bM/GSSZFPTb+DQOGFLmP2fw/sU7nSGuc6Rf+MmfTqAlR/50K9Jh/bSXc570+YHXVfugEqAAAAGtBnkF4j/8U9CNQYWEN6IkZ6jK2pn71UlZ72aABsXl/82Yp+jSvBoIT45Bn/sS9l06vVbz615aoDm0SnOIhmverS3wU2RhD+IkKjd7ipREh+x3Jo5R+fNYqgFK37KW5LCPXGYhFmLUkEP4N1wAAACsBnmJqR/8GovGUXOO7W5Yckbf5zab2jrQwmHlc+LiFtACD0vkfSZtn/7UgAAAATEGaZEmoQWiZTAhf//6MsEJHZ+eqn2E3sS+aQ77F0gAtaALz8k1B93tKgU3GlKhOgQIwxURX96UFUF6yQ/jD+10F2LlHsBm6pbMY7I0AAADuQZqISeEKUmUwIV/+OEDPosF0mpRmGLZcKPKNQtobwAODoruQAIlE769cfUBk1gdHUQ7W/B1O1uA59T79gc/qL8bHK8ayr1yUQjEm9jnoDvXfobDeazRRlMESse1VDtzVVhMfFNZFJ6uEbE1bitXGfjJx3spHL35mWMidq0iqE3yvSnAvhbsfuZUuw0Lvne/3BtH+1/a5eI5eaZ4+EWIayYWgTJs3684P/I7rFOir/TXE8jmsg2oX29GKvWkr75Uf0Fc00zvG0xeQi629VaPTFStGYf404Vs60LeHtiFSJlaEhbBkU81RRXIL2VhtgQAAAINBnqZFNEwj/wRiWCQ3sJlRxgAP2D/9eurK6RSyUEkxYw6diaG5Z9xxr5/lb8Bw2Kv4qK0RNvjYLzCPF5DxbFII5WV12OX9FPwo1E+8f99MfLbHFvV8A8yaF6ZfmGG57EIrippQhf197qYj8Nun+QDHqBb5B/Kld2x5XynpAVDPLZ5+SwAAACkBnsV0R/8GqKTfreSVI9sncPko9CA9gDhvWEvCBzIG4BwAbPWgLFtNgQAAAE8BnsdqR/8DrLFq7YQATf5DV/DMi5ukIW1a1ysgZ0HYy2nMaY5sdrWqlC/iOTp1B+Q/o5xBGdueTpoH6k6A8pQCQF1afjatKPoiO+gs5nqgAAAAYUGaykmoQWiZTBTwv/6MsAN5VTlbQA2lqecIVqn0n7o77EFyAh+GPqSQp4hC1XY4CiN2zaE+GXkBhdCv+7wF5VyWEb6lXIsmpjB9DrURCGG0x0hK4DP3f45s0KG3k6JZtmoAAAA8AZ7pakf/A7PmWeAEyvU/I7WWFsEqRlxlhg3gVYREPajq6szSF0kiMOuuhLLSp5Cf4xHYtY93R4yC4oSBAAABCEGa7knhClJlMCFf/jhARKX+B2rHgA/FcgZCHjjVXf0NPeXsrUq1u8ajB05DCZqtF0QV3JtcoyScMIoIeIeimTf0EsgmZIxHcwF+WlA0x01Vjv+8He2Gdc6DRLGZ8ruwuBaeC2r8wxd8KFGebA5l9GoR9IMoL3Tj6F3Htsr/eGraryN/qO7d4ZU7BoWEz6YRr+b4dY12VH5p+7yrmZkjvz+dDSCNwj9zYjpsReGCXcs9mfJ1OMUVulWaX+eeFRuD0RlzUeBpJhvwFjIMgsfFs+HtVQjp6lUf8S5dUZMlov/Ig57cjWDn86fXSXiEcKWVZszaeovky0BmRmKtsQH+KxsbxVOzaem/bwAAAIVBnwxFNEwj/wMTTLxC5YaKQ8AAhT/997GFjjpyLAt5/xdU9ThAWSZt1GH8eRCggq1Q+qHg6xRA49ejCG+89et4z7PRVQZq0aSKOQtYCiMOIHgSgrJjEQH6iusHGHEHlfO2TlKLQCWKSDn1UBldwtRI6sWjxHM2uT2CgO1gw0tTRw5E5HhdAAAAUwGfK3RH/wTRKtru378E4AAQeMWGJmHCX2iM/zaU05eK1/HWv3pxWNQHfU5gpD6xI6/gdGjbHfcGK4FLYcmLaaoRnKu8BMEBC6CWfvviUulmuPxxAAAALQGfLWpH/wTSOYp5X27/WyYfE6uZlLC/+v9msAIPetuDleIZAPBX8sP6gDxHWQAAAHtBmy9JqEFomUwIX//+jLAJHFQQAlRwT+MbFHk5FkS+6CebFllbJnQCPGeCrT9IgXOheeIRUUPRN8HJW1+DDK5ybe0wj/JEST4BhvD/6MTLlVwn19F6APcRL4xPrIAAyOsMNGqQC6OddYI4VtvphE/zxCVjUgDCSwH6SoEAAADHQZtTSeEKUmUwIX/+jLATHjhujMDM9CkAIIWGTPJgPei/BPA7gwIVuuy1O8YMITzTgO0aRVNhn9bu/SDf3757EY36Eu5lKJoyOosdZPwJFmJCnK6abZNMTUg6NHKzc+XGG8rN7N/IJklFpwZ3oHHxQTnnED9F4HZoIt2PbjnUjnOiDRwymn22ZaUgf27nZ7OwJjG2RcHo/SF1bXn92NnVSUON/km9rdblOE6FvbsYpUB1tnqCrqTwtRXvkQPJBlXty37TY81bWQAAAK9Bn3FFNEwj/wMH/RNiQ96l4kAC39gAkipb5enKSVK1EJtqAgecTcpqOweMG0BetuHk4gPJwKbxewTer7b8qEbNkbp64YtOMhE1iLkzXKTSbYYVgg/lkHbzWojBCcvmtqe5GolcfKBHNylqxBOgxrrrI6ljOiN6oQsd+MAn0Rvr2MAsAwSJb+7bfAmn0t8a/9nLwGuBPERZUZcf5FdpxH93kwhv9RFW0/Buq2PzOM7AAAAAXQGfkHRH/wTRfw2K7M078YAJ26Gdv2PVslttHtrrFp6SiNyZ0tfs3y2Eue0yiK/npqPeinD+FpbNu98VaZkWAY7I10sf3T3TJHhUg36jk/JsUA7X7WkQ4Ru6nj1yUQAAAEsBn5JqR/8E0+Oiw8Cz2cAE4s4Pnkc92x61HTlNDa+Iv+b5Effc+yfsf4uWL/Pi+Wv4CjMxI5+t0Xg+jAwlMvffsmSgcFqJNx7K8GYAAAB5QZuXSahBaJlMCF///oywCR/FAAOAu2TvPyZcXr/r0sB6tGlER4z3DJlO9aD/DsABLyBlCcZz/zF2iOF+4/Sq6jFI+Qb7hPzvLVuR5agrgzaiC5Gwjt49mv+YVwH+TSeYGo5twmLIOrhyR7kjxEeBUFS/wJjJy275IwAAAH9Bn7VFESwj/wMTuFHYvcJCbZxACZGiULl2r4M2twlwtd3hvnT4C4hICiFTpfKJ9PY9w3yjVEbAoiQpqOX/Y8Id37UPCB3qQZIEqjlOetrweUApeQpmnLQMRM9MW332ptQ3fv5QHKVCj+Q6ugZoAW/ifHGkCrNwTB2qOb8PWWrhAAAAUAGf1HRH/wTWpCAFh7UGFMM6VX5U0aZ3hnzI55SQ52TmPfFC3P/IDVJPDi4dJkkSP2UWFyy5bQbGM7zbDPIiKcvP6wCCckd77E6B3ckecwzLAAAASgGf1mpH/wOv620DpCACcXraf8Knx9cRsfIYAAslVTrQF1nt/aXBw9nIqmifThrFUuPDHpK1y+UzG6vPGRA11higfUwaoxs7CAUjAAABEEGb20moQWyZTAhX//44QCJkHRCIAEt3HSSRaq2zZ6mGG1+TV/AMbS48VqHTS3UEfBQFumNgF57X92ne3e6FymXi5jGLhJuL1N94rFu4Jk6twUVi7VwQTjiKf8AxCh6AzTgTsodpkHEKgmPxYBkcYQdDr1G7LlzxcT4D7qAvDY9fUPd6QoiMgUn/30VKXCLBm8smb4b7HJbm71xmspEQm2e8wExArS/phYKr3ISH64JEsGjPHCJJ4ylnyum/8OuJfrFv7r58aPkhJaABhScKtj4RlLfz1TKwEZzcPwl/80Se4S6ZjdIlg1oAMRfwb1eV10KlFsi3K2jXiwaTePdputkX+oiCqh4osta34nTBCfzhAAAAq0Gf+UUVLCP/Alr+uI2sD/XwAE3Bk09YYkYkX0N3h2C4WUiz00dd2h9Mn6Lcx0OVV8F+vnTBw9tRFCm5qbmI3vpHzOd44hf5VF/zFIAZr0UJTaPsDGnhkJ85o21e/bOb0qzyEljBo9maIabjNOTlQz/d7ofevmpuOif1D+W2XGnOAMDvJDmXZg7Vyo2tByxvGWESFAf8MKnOQsOzTiYn8jiTexVRL5lqMNb1nAAAAFwBnhh0R/8DsQ/hYAAH7bJw1AyHpv0eapd0Zw3UCjHgAA71JDwRFyeARb792vrnTawMurig5DaT5u4yJXCGaEbhgeWwgBv1Xl//zgaB4COeQl7P0qemWE9I7LSdYQAAAFQBnhpqR/8C5Dn80AEKdDO5fYWT3Zt/lYoGqouMtX528kC8S2MFLpr7fW8rJsNwxZUgu2eRvoPsFwTSYN9N6jKlrV5RGtFQGbvwJe519B48E/ZxUfQAAAD7QZofSahBbJlMCFf//jhAFoz8Y892n4sAskf/4ffGn00t/risBaLrqryRPjuCewxp1n9ZHidFMcWVAbC4if/WAe4mlkFYj66ChcnUhKoz8Pmsr2Bxh0W8vkqsNF9pShzgIgKCQwbGp6PGYbpbN6nMrJRKmF8nXRgNTxnv78T8k2y4XGu0kTFIvgKWJVBDSMiTBP2nv9WbE3SGpsQGR4G6eqXfVV0f5xexIi2Mz+ia+TAMA0KlkXpTKNHkVO/J/sww4hbAPGSPAwM+7ZpbCWsCwVFkTQ59Ssbh2FqOhxAoEw2itVz5R7GWo4NEUw1zqfFtePAQwWOJPvRvcYEAAACuQZ49RRUsI/8Bz/6SsFJ+L4ACIO6v/pQnsyaodhmCGuWz+nzNtKH03I6Ps8ciDWkuEaKmNu0OkUE6DTNjgzO3gLMC4BUFSTlKwkczD6i473Apy4xpQIMAy0IuYLWtaU8Wgzic9Pgla4/y/C8I0xkSv4bSb3z6MhVM1zHLIsn984KryZHF2Pb6UN6Z0yCk35DYx3VQks6tY2BMKtjk12n6RhQI6pS9eV5RJwslek7BAAAAWQGeXHRH/wLmQSYAQp0LqPztu+l5GZJw6OPsexlzdnqlLWLQjeLGwTsQYiv1H9iwSdb7CaX0VcvGktBIy+S/W4LvyK88xm0vT+HSSJmrl2T9v1ef8s1eAUpAAAAAYQGeXmpH/wOz361jDSWwAA2ogEsuTlm5A/GTokINvB/l+Yl1vRm/r2AWBzT2Buegu0PPPNlUVu1Rtxr4SR1I6MHHfUzo+pyc4H1F/TMBfXvcPlnOu3p+WjZyrrrvjHrpTYAAAAC3QZpBSahBbJlMFEwr//44QCIlT6G9h5xkg5D0Ds2gA5ouBpA4yiVGPkJ/wgfuSRws0gIgQU4edXX4DpkW6s0Ec9JRgcLuzdNHSNDbaQ4nAs7Ikv9k3ppTGBHyVIDisX3lSd64idDtqTErgVhYAxYX3QOs0dNa+u4heU2Ep7DwWdFD0CXdXq1rtEqR7E+MjT9IGDH6RprDEGjXY6fnUwGUUpdNnRz/LhmCtB8H26zvC9Qa9tH6n8lhAAAAOAGeYGpH/wI3kjBMPU8AIEZTWvi7WnDmZ6PSpuEpDrzrdFWGWPoJLi++B4c/LTDpQhDxgBNQsbd9AAAAy0GaY0nhClJlMFLCv/44QBFeJeEJX+AQq1ETcrqtcVxLSH4+f433M+mqfoT+H//8/ARMJFwaEL82ClV7+81wDXW6wDw13S44pWhqYL5pCJ0DxDAvIr335K3IvlmmT7CR6yj4C03D8kXX5XTyCQi1ZrAxVLegUeoaI7Kan7YzwIz8ngzX/lZiYKe6uJNmE0qUMRZDBWSABURQJt3qbKgXPNUHOl/ZXBqWcdZFEYqTLACzOgAB6EE3NPKK9pJkkk/q33wPsEOsp1F83vyhAAAALQGegmpH/wJMevWch7QXoujZ0cADZ6wDFzI15F3D/9A7k9QVKfQWj+TNs//UmAAAAFhBmoZJ4Q6JlMCFf/44QBccJmcDrYM3LRZd5YaoyQAZiqIm5+zWsgUC6SDBVqACWPOywk6vh2sAm25Fp8IDvNCx2HaYbMosvvtEXk9ohr3c4Zma04dDG5k5AAAAJ0GepEUVPH8CSsbo31RnlBmVdUPcr9JxIRV8kALnq6j+0B2x1NV/jQAAABgBnsVqR/8CStW2ZymQ2MTbNtwMWNbTxCcAAACiQZrISahBaJlMFPCv/jhAET9ohtNj20Av0QlAutzGbZyNpgS4o1JHD4qPDqqBdg0F54xqZQ21RH0mE9EPsVbAVDPvMhRPMrFvq83/jWs/6PirIrwPKWwmchgW46dY4Y+3CopCn0I3pf+3gv3FhnQSWK7dzh6vRL4zN/H4zsCopBCRihoGeKuFdHJdtvQ/BVQUSalieFLcQ+vct0pplDPPNO/LAAAAIwGe52pH/wJL0moXMwrK4xfBm0SS1UUFwANSmW9G2jS//i6AAAAAhkGa6UnhClJlMCFf/jhAEV6JtDb8KrYAKftk+8pBkqiC/ZRl1B6+CqYC0TRoJZTXOjWoQIZ1E5NBkKlcH9vO3tZ3cpkwoK7lVu7pOfPlkkIPFFuADdWsELpEt1JfgfshIvmOkyf369UdHjs1jU34WaLsnyx8t8lPNVPPVwoljc5lQ8BBnm8QAAAAekGbC0nhDomUwU0TCv/+OEANdO2LGbyyWwCf+A//r+UpgXiByEc7RDxvNH3AVcicPZlux5SCEEJzXitqWiwQ1aLi/mHxHg8tru0vk8t2i/sEgtX1NbUY2jQJe88o1Ioneew3Ru6YrTA98ajttrL9Zb1IatjIts1pQ3HrAAAANwGfKmpH/wJEtH3MbOmwAlqeNd9nHvstk0BoswByg/w44131VFQ5cyjdbqQFiBR6WoA6M0wavJMAAAC9QZsvSeEPJlMCFf/9ynjyb87FWJECQwAo3Ir/67CfslVvPswA3M4MSzPWWwsn3VdvvKpDrTn/+yuMXYVJv7oaZXbKU5cLNleXGdTvZa/qpSv2HcvdwE5wGYT+Fzvs6+Ww6mMrYAwm/43cJ9KVHL/vTWNna2ztZVG49o/Ufpbaiil4mWVils0wNX0UfHKvgz0BWtFeX5EmGJkiWeTH3hCtsJfnaIXjAv7Gn52nVm8WzrRv5M10KwgvTU84s/gTAAAAGkGfTUURPCP/UDFjnYni5Iq0w28drfKzjNgRAAAAPAGfbHRH/1xhNhrJBjfoVpNJ1YyUikJAAGxP2lJzFcBzqpp7j26r2qNOX+FKSJ+LNhkKGw5TqcG41x/v1QAAADIBn25qR/8CS/JNk0XxMcW47yuIACFLY9z2ouOI2JbR3fEX2hK9Rz8NJ5lNwFojbZ+aSQAAABhBm3FJqEFomUwU8K/+OEANbO2YvntCXnwAAAAyAZ+Qakf/Akx8uMSDeHxxbjvK4gAIUtj3Pai44jYltHd8RfaEr1HPw0nmU3AWiNtn5pIAAAAZQZuTSeEKUmUwUsK//jhADWwhBkSlc2JCCQAAADEBn7JqR/8BxX6U0rIPxBwTMpAA2nL+57UXHEbEto7viL7Qleo5+Gk8ym4C0Rts/I/AAAAAGEGbtUnhDomUwUTCv/44QA1s7Zi+e0JefAAAADEBn9RqR/8BxX6U0rIPxBwTMpAA2nL+57UXHEbEto7viL7Qleo5+Gk8ym4C0Rts/I/BAAAAGEGb10nhDyZTBTwr//44QA1s7Zi+e0JefAAAADEBn/ZqR/8BxX6U0rIPxBwTMpAA2nL+57UXHEbEto7viL7Qleo5+Gk8ym4C0Rts/I/BAAAAGEGb+UnhDyZTBTwr//44QA1s7Zi+e0JefQAAADEBnhhqR/8BxX6U0rIPxBwTMpAA2nL+57UXHEbEto7viL7Qleo5+Gk8ym4C0Rts/I/AAAABB0GaG0nhDyZTBTwr//44QD7qrnWQ214ANVtDsf8dmkwW16lC0aGFrHwklunnRzE38jzrt5sPHuBARhocDqlLo5a0xyTn0U2Pvx9IhTmfDRlAZq+jm6BQXR+sUPTaCeMu6nJsolzYXvNVbMY/DNcskdVRhmomwkv9JtPXk1uehm6mAb9LCU/yICyc8DWhaZipVVsJ7JmVF/Gfa/kXMJ2lom5wk3asB0nX1P088MgrM1v7q7dibM6wwubWV0XUx+1yoap3WX2OUEPy9diDCZsxzCc95gQoCUNhR1MM+SQAWhg0bkYUwlWtCQ19EDR9S4PcH4TIC9XAnCZKoC8RP5PYHMmSoaauao+BAAAAXQGeOmpH/wTRjCIJwZu+orJKThEFCvvAzmKiTIfj2gA+PCCVYztDdONqRSHXBuQy6AhpYOxa3OKzvw0e+JgFoC0k1QYECarHrSBDubedeAtnHxpGPQPZ8vG0Rt2o2AAAANhBmj1J4Q8mUwU8K//+OEC66r/G+6CuAA572AFfxhZa+km2mgNqzq58sMwjT8bDY66KYPsryjq7/XlgPh7rD98Zx0GLCyooEWIBSsDj8bY7/ldy6YmBwVzFXYVt9UrrBelzV6JOwybr2XIVhItLNOLOXKOpeB1qcAtzkQGJUq9sJUibvvxLp1XIHzw7jj1VgoiD5XiQfoIOx372KKleo8YbJuip87AeO6iVv05gBxBz3/WJm3OFdqpcJIHW+Ihjo3hl3mhuztb3aqW8dO4sCJp7atzGMY2A590AAABTAZ5cakf/Bm/Ly9DXoPfpyuI7jQRs3uAAQ3Pkfy5RyrV8g4275Eh2ArhfpT014KrPDDAmNao6FvJDP7R1JY6hON/kTRUPPKgANQnah2Y+ako4w2kAAABxQZpfSeEPJlMFPCv//jhAtKs9pP4L/aikh24ckohIABVgguie5FoVmZbP5yCArSIz9sjg3ui0VMsayT3LaivnQDnlcxHTZIricHdMlytSHMJSUqyL0kTPJfq0GuekHauJaneZDERrGjm2awSoKYbygXAAAAAuAZ5+akf/BmckVlCCAPoX/XZTRrvmGFf15qCeAB9vHfm0OUu/FbKwhdqePRo2wAAAAGNBmmBJ4Q8mUwIV//44QJ9c0Q92abirz8/EAC6KZ1CWhY3WxG5NP0bgoNL17d9NFS9TckOiboh4rxuZMCAR5f19Yc+Vai7dh6Z+jdW9UXn+VO4ptyZc1QmkZstxLCTvVIxYaL8AAACVQZqDSeEPJlMCFf/+OEA47wFuud15AIIVAEdqiRmYD3FSNvuf2fqJ6Bd3qf9lVRFA1EBAZ3iik1Jy6xbhFRHb3L30EGNO1jc2GusDbAOb4khAebdZDAQQ/7/syx308LLwIINnBRX+Db9DN0ohgr8guJZvMprSm3wV7XBiAJggSuu8me79BcWrqahpqgJ0fKCX2mEG0UgAAACQQZ6hRRE8fwSRlB/cAEykbi83PVa4tkX2nhokMKl1Jmy8/ze0ARk3zryI/HuHBCw7h3u18Jrh0BPG8YNN3wfMxGGzAo/AIDWs8hQOeJZy5jUbLiNyV6vexq7JKNRrpApykRk8V+X8JSr/hp0af+MbP9faAMx/U5IQyIILqUs5xZu+LodMzjQphVg0oUNeGbAxAAAAQgGewmpH/wSRjYb0w/dmjF/fPYDlAANXtL/K7SW8dWZ8WfUqtiOIbQ+wwKUL8oMOPWgEU5TMSokpaRz3ZDa3wdn0wAAAANpBmsdJqEFomUwIT//98QFeC5ABwYtR6a2x6ME80RGorsZ4l9lkH8bIBVWYTMI156q07Crzhf21tLIOLv3UpP9Rt5VDqPH2uNCh4vFnMpMt20EjozPqVytOEArvqyEHVuRGU8t6cY2wdelIvU5L1OQ9JmOlPM0CvX/NIyhL1M6ovdYMaDGpK3+7GQ9S3AUJbt81fctHS+G75wxafhw2z2xr+PXTBeuXvpSER/lU9jMyhnpdIYd2bXRyIynbr2UGmZ9RKZcDLErb+jAscvTrd95gXIRS2+ZeWV2l2wAAAF9BnuVFESwj/wQAzuTq2qNEX2cgKQrEmYqPpjgVeUDPLuDPhJukNwoL7UAIJbXZhLulRqCSG68ojGHVYwWJ7W5V6k3D9odE8p+L7rvxDLWz5/b2TVcUlCxrbmEwhID62QAAAFIBnwR0R/8EkTxqvDIpS5XqoAJeZj17ZqSDIDlO40oA2yXN2jDehEB7gA7dLHURFxlpwQILTEkYCf9V/xU4fL7QKDJul7t/CkW20dUMYbio9GqNAAAAMQGfBmpH/wYz7ogAnbbkhFTWO5YtsvgUVUGH6d5t/ijJAz4ds3w0GMSIAEyT3tRBuMEAAABGQZsJSahBbJlMFEwn//3xAV9knHz1V0CymVco7HsZHqLcsL2WbAAuLCBLJ7s/pl78ZkQN+dtTRxDDBOtZy1HjlLlPTX30YgAAACQBnyhqR/8GMPUQATttyQiprHa0tE8Ajoil+NQIL8L6Ro8PZWMAAABoQZsqSeEKUmUwIT/98QCFGKew5wAcexECYlql9aDy3gvg2Ia7Myqv57v4IZOw3fhVT/nrWpPXuZ3kXuyFXRb1d6U8uyJmAOWOMsGj0bBvgxbyeif19S17AkkHD9ZcuoF4oM3vd0ck1+EAAACoQZtLSeEOiZTAhP/98QCGUVjMHQAlCh0kLaTyWI8bMCVg5wStWnnaYxwLenfTImFg178jC9IyeJP6OwlPWB3YK+rzMYiXZaV1CzgVyw4MFh59lORubY3TnbWhwqpxqjU3xSKhye1IGwnzNWlmix7sNYsBDTyq8se8e036WavV+IKkk8ss0sdNBso5ePkysIvy30s/LYcSeu8oGpXvwTnAji+VK4auymeAAAAAUEGbbEnhDyZTAhX//jhAOO6KB9/7mYHMoodaGnvd8ABlOllBG/3M46U+r4pp2GFm7L8Sg/K/DwKj8eRrdbzzvWuzbJEXz/VSYnzgEMflK9ZYAAAAhEGbjUnhDyZTAhX//jhAOO1OjCaQAZW/77DQ5i5VNWEQ1Rwz8OAeCTWkAqZdi8gPCjhINk5t3VJSeacqug9XVMe9jy9vlfcV1xkiovGSLRtUgmRdjh6Z57IADEKmf5LgBTblUGFsGmXDxE5IFlk0EgBjLcTP++aOoEGuDsPnMntCN9fVyQAAAHFBm65J4Q8mUwIV//44QLQSmgAvrm/0A1OJqE9qARLf8MIpDG0+CxGmUlZv4zYlPVeP7uDp88goEor4SbbIqLQwzXYh2G4n9BMx6tVQwIYdwgS1BG8ytm3S3ZGM10UWg7A7kxkLmOYF7/PnJH163R8tIQAAANFBm9FJ4Q8mUwIV//44QLSq5xQOtQfnf5YJ/QAg/VHYdtFPhH5lBdy+tJmWyzcSNA/Xn5/LRc4RJrvAXpww4r+LTPfEvV9S23A45P5l7YzmwV34KQcDxbR13rei+szr7+z2QpA4+hIcTdLUayK1h6pHXjs1ZQJXywRrtG1o9tcEIYRgmIVpQhjGV2x/vmMVYTq2zZhhR4VuKL8crGtTzllMdpEvmyG+GWo6UkKXrY8tKbN94Gx7QzssJ0JDKYj1wGop0kzKfDwi9KUdUF51vv7DwQAAAG1Bn+9FETx/BmMn2WydiQAWRyUPDdoJgGSeegVaxwvXGYlnOHCVVr0HOPd5Ok8gB3DLX6EYUVVh4wi7uYm8puqKge2FIqKHEgS9tyznjLu1a5KskpQwx8lsfe6+e1R+2pSwucN7/7YQeMOvLQWAAAAAKAGeEGpH/wZxvi5nEOg08OXJWloxIPMEx25HRjtPOQAbPWXRLHNmo6AAAACkQZoTSahBaJlMFPC//oywEWr3ioATHSwPpeWxY6AAaA2/tRVYl2T45GxMe3oOpIVOCtTHJmGlEScWK3qBdZI1XOe0zTwz5q3V/1Pp4/MQpDpT34sXNSjHtrtjh1N/3O5b4yInttHrhUuOOgqK6NeJ3WBu8ZJGZ//XhHeoB82IhaxEHi3ngQ1JhutfD94ggY4v0mvuTl6U1liJ+3u9Bm/ch22amoEAAABTAZ4yakf/BK8lPuYZ7sAB9Kn8x4+9dNaOl3LMI2joHDfwILO/J7DEENvaJHuembQ/7JVFAhkWUe52VuokSITGA+ZTdf47HVGbEVeJz5sfdPRHs7wAAADwQZo3SeEKUmUwIX/+jLARjs8Ha5RPaMaKAIyPXCX41ZWEd8nsXr3xXneQ3QVsnmzdE18iYBXMm7qNUrorucTqbHLHPtwGifZwOj3xzJnU2eh3h6KhTE9AWrojDSkxjXNMca5c25rYnNmcybSUQsqyO7VBS0sGGRyI95B/j9TiC/tA4oaeyr7EuSVl/5ZAjOEquUdGgbHylX/yww1SSQR8uu1dqgTppty3C6Y5R2uqsmCVqOVCtyRljZ6Nbmskm8QjqjcAH93u8ZJN+vorH6F8y2RY6EFhg5xj/1YvzXE/vXd5TaHjXunjP2v4+2zQZLfcAAAAY0GeVUU0TCP/AxLgQiWeCAARFy+CgriOQrH5mmmGF2DS6bsoYClPWM4nTv90Jb472wNXupNQk7xfei++lT762pt0yx8lc3vAzXr5s/laHP4kp5ZtmaocdSwUyDUL/W25Qp4coQAAAE0BnnR0R/8E0T/1njA8EhT18AAJqAZ94QvfeQMSF4cm9rn7lQUxr6LRGEAMNMTksGp+KIGv2dSt1WlNlnQqrAKUf19UxQ++ifvO3LF+wAAAACoBnnZqR/8E0+CG2lOXEtDSs1HURKeQ4M5fFVgANnrLolbqPJXmxYkf8csAAABzQZp7SahBaJlMCF///oywAfXWnKnV+OEAA0Wi4S5vWgOySgNNFhk4vsjpPDDolbi5uCSxPGE4H5+FXqkZiTxGKgqWA2uCxyB5W0j8mDautCqulgifO2Jdx0VC3NA3AVJsT25eI6tqNHKPKTv2vcKEC5yrwQAAAHhBnplFESwj/wJZ4gUSIAPwz5TOlNJfbW3nL3+sXSVKA8s4hBOq+0nmMSfRxa/D3nV6ZHmIalHv31vwW7OStaMUgC5fEoCfd3nT1kJZDjGU/nGksZs0zpU7u2R70h406S1XUcsyUllSpHS1vQq1hCwG5yqmTAivz3gAAABOAZ64dEf/A6/a/tSACdN8vHzn4IxzbzIgAVDvpO8BSIPSqXtJdCpDyzIfXVfeZdKvfZA6tEUQs3iIiHllvKlPtfYDujdNNX0qzZKkkPiBAAAASgGeumpH/wOmJPiEVJgBL0BTvzg+353LGb4qnoRhVjBdII+C9BxiKGcxvKkNLXGkNxNMTZ1QA2y8Q8sRakx1FDXXU9S5jw7OmRboAAABAkGav0moQWyZTAhX//44QCI6obCoBSQfA6zQD4+/F0t2pUtf2EEvAQTwz6TpQkjptcKRMEhVDRdzDecvuyWqnNiKsWe4K688PcMr3ejTRUBRCQnwWo8pbxXAtyJXn1bG/wI9WQBAKeJIX+qlZb73C7bVyvYkCJwLxvEP6pa48q+qavKTLkVKCp7Kpo5bSo+ftOLn+wR8OaOOY4TdvfO1F79ITxEm+Vqy2Dy7J2zpSciHsnFAPoFundFGPevqOr5I4ktpSlFv+m3qeB4FrVuVz9+smaiMxDZupET9C+S12RKsvDbhUaX2FaGa5BiN3tI+M35wB2UNbNDa1/mBqnJpwXXahQAAAHxBnt1FFSwj/wJT6bIRACWGMH0BNKL/roc0kbSHw4HqeN3nGiqWm0eVJCWe8KbDpls1TjChSy3hDyBsjlRfgboeiO0xcoehIiprqwd12xSlpmvPGk5G2Wa8mlqUbwswll1xeoexxlRySSVHouB5nuTHjp4OOGwMb5fqF9uBAAAAPQGe/HRH/wOxD7Qty0HAACCI6EnSRjg0i/CNRwAhgxs3C3Ltgoyd/j4Olp2oQMhCiYBJuA5VMHmqk1eCJuAAAABPAZ7+akf/A6aUZ/IAJqjC4G/IUicv/Xi+QMWW+wi6gMqGpEm871BQFC/IbOqtkw5a7UuqBHoK6ImkCVIRGlWD+D4TASjO5qH3+tQaX0wZwAAAAMhBmuFJqEFsmUwUTCv//jhAIjt2MQFDO1TY4+bGXRWYw+GSRdCDAvVsHoSqNUZCs4ecaERAgw3Zza+i26hEOejPXK/O9PB7EI28z/RT44TvKDMaf/CS5SVQzO+qN4CDpjykdmLva7xFvM0aXWjY7U7nJsVFj7UT/CGweNQO8Roluua7r1lLdG8h3EkXlJrOy/Kh9KpIrloOGc0LfjN5z+Qoc0iwjpFatQfhPKgDSCje3JVn0Bi37sKCfMIQuey2kzhN+nail1sKwQAAAEUBnwBqR/8Dm6BlgG1FACFDouncYBMS6slj/EE5ncmZpkgJI7W2EZ9AjnkmY2SpqXGOoLeVhlAoJYhTpdpzVDOkQYDDx+AAAABlQZsDSeEKUmUwUsL//oywA3lVN+tjqoVA2CNjrABbeL3/VC5vjR3RgDC7SIpHuM2B48v/0RC3B1s2TbzER22o6mrjsOTRJzCpMVhukAn/MyUcwNPBr7ndYKgXr8e2IHeNh1eDdgMAAABCAZ8iakf/AuUqXUvABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa8wvAsuf3Y1Kx2ncO+ncmEPEhgbgAAAAbEGbJ0nhDomUwIV//jhAB8tVcF0XkIATLqBr3qb/Kscg0/sVkK0jWVjdLjd+9N1elGTdsTbEUnXTwTPloRSQsdwKe1McefL4EhGfY8QIclkG2ncnu0bvrxIS6GlqU991Ys3OBisMr5Omss+iMwAAAE9Bn0VFFTwj/wEeKbPByfDMTGmKDUl2AAnGjRkHYOB9NQdKTxv88psgBwz1pj84CPqnEQJ2Y6pPKY/IiOX58NBSsiOLSskdh9frZKM6gLMZAAAATwGfZHRH/wLlgIGjwARAdF07jAJiXVksf6qu8mZpkcF1LQFCs0GDPCzCsHkaBmuZ5PGPcPnDI2xkTJH4lyWik+hRDbVzMsbQarqPYopfO4EAAABQAZ9makf/AuUqXUvABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa5Pw8Y9w+cMjbGx35AISx9kpiA9Hn/OyxiIm3nusu4Y3zWEAAABzQZtpSahBaJlMFPCv/jhADWztmL57QmcYN/2z6EAEd+BOsXnG2stjvOhP9Ncso4ht56H6ju959BlyB0wVI9+GxnJGSGYB4Dj6xIbd7Z4pxOqNXFGr23DwqmdbpIQIrIFVacrLbTY8vrVgGdmwt3iFnMMtsAAAAFEBn4hqR/8C5SpdS8AEQHRdO4wCYl1ZLH+qrvJmaZHBdS0BQrNBgzwswrB5GgZrk/Dxj3D5wyNsbHfkAhLH1xFggRytc/+dli/MVtgNfMGp6tYAAABuQZuLSeEKUmUwUsK//jhADWztmL57QmcY+o96HYPGcYACHOirV9+mVSJ05hh4gryibbgztdIQ5S3y2aW0Av8GF47mIzBOCJeCF23g4/3zUxYEg0xb4t/0YMT3SeodxS6UV/87kRV80eVKGtbPsrEAAABLAZ+qakf/AuUqXUvABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa5Pw8Y9w+cMjbGx35AIWTU9F85P+WC9MDqko/QsoAAAAW0GbrUnhDomUwUTC//6MsAN5VTfrY6qFPMw8SToHPQLWADKeFGqxT3xLhMJ95qJDT0JbZko00+l8oPhq1rkvF6n2qS0vnAo6j7t2l8O4wPcf1LSKtTSAWKl81IAAAABJAZ/Makf/AuUqXUvABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa5Pw8Y9w+cMjbGx35AIWy9uv/JgCq9He229CywAAAF5Bm9FJ4Q8mUwIV//44QAf38FgB+ZZKrenXD7iAYoSXNAnJCkU43IlLn6h/ZntqRdw2N8C9NQyJEQP1UByUk/CjdI7IvwHwuvXhoMprnMGlihiBIC6sRPBMfg8a+jULAAAAWEGf70URPCP/AR4ps8HJ8NUoTwQry1mfR8AEQYxIG7z7qyyRNlMnspkRWPwF+aQC0JEVuO9n1wpQd2lsY0uPTiJC0z+hAbIsxuQxgrgJO9psraAtRJLc0tkAAABSAZ4OdEf/AuWAgaPABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa5nk8Y9w+cMjbGRMkfjBzqIyBiaUacH3me0deqbV2d8PTZ4JwAAAAEsBnhBqR/8C5SpdS8AEQHRdO4wCYl1ZLH+qrvJmaZHBdS0BQrNBgzwswrB5GgZrk/Dxj3D5wyNsbHfkAhbw9ZTYaxwopmyqZ9K9DA8AAABsQZoTSahBaJlMFPC//oywA3lVN+tjqoVLGX588AD8WuEy9Fo4dVkrL1lNBbOLz/8U5VkcZtnEo3cndRQW0oMLQWDxSc1HSFMV2hlUp0hbh/J5vOLKPj6peijOc9bW1QsUeUrKd5WKjk8n/GmvAAAASgGeMmpH/wLlKl1LwARAdF07jAJiXVksf6qu8mZpkcF1LQFCs0GDPCzCsHkaBmuT8PGPcPnDI2xsd+QCFp9Gy2SMlr1O1+228WCAAAAAbEGaN0nhClJlMCFf/jhAB/d/74UAJHiC6kMoIc/ip8K2ucw9T+1o7QeT/u0z7sRtwMPtgTREIhN46NYHwI+W5lMw4om0QiF4QPmVitfi07PSr/kWnuloyG6IuWtUq1mxWyuSa27pFHSCBMiekAAAAE9BnlVFNEwj/wEeKbPByfDQlX3XBZgAPoJC0rrl+z1Iez9baEHbZCnoP8MR11/7Q0nvs3JaCfy5XAkfQQwaTLf073KFr6gM9NzExXvOBx/hAAAATgGedHRH/wLlgIGjwARAdF07jAJiXVksf6qu8mZpkcF1LQFCs0GDPCzCsHkaBmuZ5PGPcPnDI2xkTJH4vSV0uAxpJQvVOYd/QKML3EMigAAAAFABnnZqR/8C5SpdS8AEQHRdO4wCYl1ZLH+qrvJmaZHBdS0BQrNBgzwswrB5GgZrk/Dxj3D5wyNsbHfkAhafRssN7HpX+Wyqa4ccWesTUe+cxwAAAFlBmnpJqEFomUwIV//+OEANbO2YvntCZ6/0cN/muQiABqfguhT+F54YIMdgomj71+y3WZQD7TFViP7Zna3oBCfxoiiRF7KQaAoOo2U/nZ4b7wKyN2m6V834HwAAAEpBnphFESx/AuUqXUvABEB0XTuMAmJdWSx/qq7yZmmRwXUtAUKzQYM8LMKweRoGa5Pw8Y9w+cMjbGx35AIV38oy1Hq0E8tlU3g3gAAAACABnrlqR/8C5pgOVOPdjhA4RZ4ISwfNb88AEPlYTA7CIQAAAGBBmr1JqEFsmUwIV//+OEAH7zT01oALXivgnQZCeKQOgPSCWmBnxJ5W1gFCijx5NFsXXmiOhmspWW3ayPzLCY/ir2Tc8mIm5t6g5PBs0cIlBKK14eby9hVlmwRp68ltiPsAAAAoQZ7bRRUsfwHF7t26pb+V2FpkSuwWAA2Ky87ArkWXSMKRqIK8Ghb15QAAAEMBnvxqR/8BxX6U0qtDOV02UyxAAvrmPJrQ8mxvr1RWts7CA2nJMk+rX3SR/zVKgxMNuErirbzvaLxJu4xyslfkP/A1AAAAJ0Ga/kmoQWyZTAhX//44QAfuyFhlUyL1S/Wmo3AAP270b3dJ3syFgAAAAG9BmwFJ4QpSZTAhX/44QAf3VXBnB0RQAQiZQ9dHWrk06AHE8TEkEcHv8XHY0uZYe5ffG9IH+EotyFg9RIayMDX8m0hZb70rZ7l0lOgt5M17MgyZCPMWYhfG0MQnf7j6Zs185ZE4DfrGG57O2S6vXsQAAABFQZ8/RTRMfwHFuJOV4/UFTn0IAACUYLpXAvO5BJ+gfCKvVGDVFiPBL0akaxBuZ1Tmev8NTOl8LnDKBuPo2Dyr/PwIC6yBAAAAHgGfQGpH/wHFfpTSsg/x8a3NL6H1AA2fXMcFCQfY4AAAADdBm0JJqEFomUwIV//+OEAH60oucxuu73r4AOLPjrA5jfIVv+hnj2EUqReB2us0tx43LOjR+iHhAAAAb0GbY0nhClJlMCF//oywA3l6FCZEhCoVONQv2IACG48oVxXsadRrZf7dDChC42PSOLDyK/bjhVpxCfssuudXchh6KtETmQ1i7UDFbC1tRtVotvSrcncLpS9EDvObSvlGw5Kq5/czIK66UPiy7bZsgAAAAGBBm4dJ4Q6JlMCFf/44QAfrJEbQ1WvfWS9AAmd1SEiSYrLKSoJ/tZAFqTlPhYuf8yDdXaNbdiyVHDGX0r14Q+31GAj8Qg+sQI3pZ9QJojlSWGsumLFnfvgqwg+b2tgfRD0AAABRQZ+lRRE8I/8BHimzwcnw1M5yK4xsAclACTo1p9zD3/NofsvNdJMiwOMveUW7adNj3FRtuWGGNzGRNVmtxt6C7CGwF6Gi/Vm3pW6VaKotbu9BAAAAJgGfxHRH/wHFr4pDCrDERN+pGmACZXq82UGIwEK1N85/fA5JLj0dAAAAHgGfxmpH/wHFfpTSshAKXjxqEHBEwzYAEPlYTA3uoQAAAG9Bm8lJqEFomUwU8K/+OEANbO2YvntCZzj4ZJWIVGQARBcuDyTY7JImYwroT8yBS+5veXU2v0zDxPwdQcP63sUTCVV+45ISymXZX0pY/Lj6zAWhScT2TzS3Gu4ieFdJzPoBsWRWdIT4zcRSGYPMsrAAAAAdAZ/oakf/AcV+lNKyDnjzQEwkTXUsABD5WEwO/1AAAABdQZvrSeEKUmUwUsL//oywA3lVN+tjqoU9AptyDqJU33lAA0XfJjEnChIioexicxSyhKp8zRkCaBh981Hb2afi0+8NvLrSBb6pCL65/myvoMe75vNvF81a069o7m95AAAAHAGeCmpH/wHFfpTSsg549EHBT2QggAQ+VhMDv9QAAABnQZoPSeEOiZTAhf/+jLACAAr0wUkABqrR2VBKGvdZcSAoZHqtI7W29vOfx4TjPX5X0Jq4UVNL5B7sTfj8J6ECS76AKlPmD/lqbz1PNcz+rzVPbx1l/Mx++2N/0WQWQZ/9LmjhD188cAAAAFhBni1FFTwj/wEeKbPByfDOL9rBIAANl+nERAppONSVKsXJKvPFjuhK5qYik9jpW53iznSg77Rj7OYW6LpFSpoOo0anS3A5+cCHBlzQxn4lVLRVw7eV/4shAAAAGwGeTHRH/wHFr4pDCqcUOpETtP6mABCSCu//UQAAAB0Bnk5qR/8BxX6U0rIOHTu/t2rq+MQABs9aAsW/1QAAAFhBmlNJqEFomUwIV//+OEAHy1VwNfUIATLH95+w6G3jcoF0VTf2002fAvR8D/sXQkqdtJqMv72w8vkp7BfF9pLD1i2rhn7zTQdC7qkmkwulR5Z08mQII7kyAAAAV0GecUURLCP/AR4ps8HJ8NU1ONRQAH4NTiiWQLssue1H2YTtEi7DcrhksnKWyo4uAlvYkepJRec/Y/5B2yTRAfW7Z83Vmn29PK+1/fJjUrVI/W0noSCtgAAAACQBnpB0R/8Bxa+KQwqyRKPqfuhH84QAQmVhMDnmJQWtOoP/78sAAAAlAZ6Sakf/AcV+lNKyEAwP55fVZdvf4AIfKwmBz0ZY8nFJKEf0lgAAAFtBmpdJqEFsmUwIT//98QATbom1GLMQ4wcgBLSC7Szj+0UVqZwSgCruWFcRYnkzeNo25mlH3I14Ei8y3N2J9MNfND1BHOsFKxkxCvIK1WvxJ/gfQPQM8wXbq43kAAAARUGetUUVLCP/AR4ps8HJ8M48njk//YlEAFN1zK5PRQxTrbOdp+pxVoGZAAMUiwfaZf6dvU6mf7bcCt4BwBAs2HW4EjRVwQAAAB0BntR0R/8Bxa+KQwqnE+XXo7dcSZoAA2etAWLAKAAAABsBntZqR/8BxX6U0rIOkxATic9gsABD5WEwNi8AAAAzQZrYSahBbJlMCFf//jhAB5NKWeOGoAJnCobn9UfbRofHtBmKRdEOUjyfFl3V8qsRPyFhAAAAZUGa+UnhClJlMCFf/jhADW2Y2EIcVs8/c3UnXwDzyACIMXp9oR8WWsQjIGClKVRYZZyWHkw7AlE1DIUgNmaKvVdQ7I5Z5ZfvfbgJXLOvPV57IPmScOTsJdo62iCgqbndfXYe/hZqAAAALkGbGknhDomUwIV//jhAB5NKWeOGoAIb1AKBkxQjziGZmmgZ3mvd+BeSz7vq9DsAAABRQZs+SeEPJlMCFf/+OEAHmzoGtoo1gAc+8Dp/uMm9FgVaC0VBVemxWi6C/taJD2UsDm1E8L2mnnlFUw39JxDLtaQ1lEhZcrim3moe3DFPjOh0AAAATEGfXEURPCP/AR4KOc+RSz9jQ0DqdjQ1E4FpjACDy/rsKntkgFAFX353rFaGjWHaJ92flH8UQQqkYPPR0hDgqtzzsJ1R1qDerEDrkQMAAAAdAZ97dEf/AcSH1hU4Tyfd5UE0sABCpTkDd4HIAqEAAAAgAZ99akf/AcTJRlRvHQIY8+YR2eAEGWf1nSyqQntJkwwAAABsQZthSahBaJlMCFf//jhAB59VcGcHRFABCJlD10dauTToAcTxMSQRwe/xcdjS5lh7l98b0gf4Si3IWD1EhrIwNfybSFlvvStoAgG1Z6hb2U9npeQNFXSUTYKEGjhyFYK5KAWKzKs20Xgqvk/4AAAAREGfn0URLH8Bxe7duqYhTpcpYQAAEowXSuBedyCT9A+EVeqMWvV5P0V5KEsQJuCUqdRcqgeSZYcLJYfCzjvOVyGVu+WBAAAAHQGfoGpH/wHFfpTSsg1GxN3NN6H1AA2etAWK3gD/AAAANUGbokmoQWyZTAhX//44QAeTSi5zG67vevgAufag/o2SYiwfRx7CKT4rLt1mKNi/6f46P0SNAAAAb0Gbw0nhClJlMCF//oywA3l6FCZEhCoU1WiX7EABDceUK4r2NOo1sv9uhhQVT3VVOGTyJ/ixG9cdqjY0tnr30fhmKtETkU1R0EDFbC1NhJRmk1QKIBmF85peYnFLr0cY+ZTkqrn94SD++dhFa4Fm9gAAAGNBm+dJ4Q6JlMCFf/44QAeff+fHB71VT5rABM7qkJEkxWWUlQT/ayALUnKfCxc/5kG6u0a3WY38tMrWLyH4R9b+AxueSLjpxAWwYEwjoESuYPr6MdXQE3jpUWjEv6vrv9tz0SMAAABQQZ4FRRE8I/8BHimzwcnwxtoPQcpPrmhAAlqNOc1kom/KtqhdAW4JihFVffhn/M9semINa7txPWxtdt2e3QLx/ppdLwSyiiykJ68IK0MXs2kAAAAlAZ4kdEf/AcWvikMKnpPl16saYAJlerzZQYi/ChDYZShjbBzs0QAAAB4BniZqR/8BxX6U0rINWO9MbFBwRMOLQAg3X0JETaEAAABtQZopSahBaJlMFPCv/jhADWztmL57QmYrDfJKxCoyACILlweSbHV4/M5Ze6L+W18+g2rwy83Z/CbA4TGnmfJrN9neN+ImcIijMrpZSXWLkjrMc5fq+UBZRLk0ybTwKnocpkgfwPo5zNJXcYFHoAAAACEBnkhqR/8BxX6U0rINMSh1opek1yfjgBCZWEwOKzU9HIAAAABgQZpLSeEKUmUwUsK//jhADWztmL57QmYNHTWZiLgCii88AIT39xGDhTXng/8ta8udKzV+bOsGlRamXGf7Goa/GwxO7W9EmwRrFNpx8bicQ/z6pv/QBZxmqblhdd0+MRuBAAAAHgGeampH/wHFfpTSsg1QWN8X1Qnqn5gAh8rCYHfagAAAAGJBmm9J4Q6JlMCFf/44QAdsiQYrKREAE6kPQ4JUbnJfJ05TEvCo0b7tykcw+0Xz/kCASUPNsEJ9uWfZi5c1zI6V7LYPS92XpX69QOfZ8XNTkPSlIU36tPqdL58XoAxnTtPzIwAAACZBno1FFTwj/wEeKbPByfDBxNtpGpLbjAAhZOUFG8z5OJPGpj3eQQAAACABnqx0R/8Bxa+KQwqWFBA77JUOyt+AEH0JQS303I9KNQAAABABnq5qR/8BxX6U0rIMK/zhAAAAMEGasUmoQWiZTBTwr/44QA1s7Zi+e0JmDAAn+xOOWMWBABOs64y2MfZUJ6Y6HJP3QAAAABIBntBqR/8BxX6U0rHdi52J7FAAAAAsQZrSSeEKUmUwIV/+OEAHZ0V7KhNiAC6C6VKoFrUWMbxcxVI6JvB8xlszfJUAAABiQZr1SeEOiZTAhP/98QASSeEn8GOBhI0eAB7t2knKOvusx4Gu0LYSKheIsZwBDPu18JY2/SIFtNQrXT3djEEoBV/+7bnB6y2hDat5c/H5wGBPSgR5PerFkPXymS7RhTMz13wAAABXQZ8TRRE8fwHFLUAWkVs4AOAUL/7z7U0VzToqrChCTdKj8rjpBXuiWmRwlyq2e+O14p5zknL/uRu29SFb7g0evXMyqMbbnF+9CcL2O0GUx/dXcpL3AGKAAAAAHAGfNGpH/wHFfpTSsgwWlPHR1w+4QAQ+VZq+/wkAAAAuQZs2SahBaJlMCFf//jhAB2dFeyoTYgAufad5Epx9bvOiPNB4D9pJY5kGeu293wAAAGFBm1dJ4QpSZTAhX/44QA156OzvmBBruWdz6bbooABAjxahDx22bPMb8WBYLnWBx30EmxEfbJe1rsn1LvCXT3Jo6+zYD1NEaIfeBM6qvdB9ed18zd3MB4atWqsgV5P3n3arAAAAeEGbe0nhDomUwIT//fEAEs3eOGIABvjjxEp3NQcgX9M3IIZviIzhjTLd+Ley5+9J2jTL9E2N0sYfK6DsRsUsnMm0HBhZmFo1RWtTiIjcKKT1J560dQ19AS5tJ2V+QMIbGFZxhXiWy0wxbZXHjfujK/KGT1QNcJR3/QAAAFhBn5lFETwj/wEeKbPByfDDkZI8gAVAC1tc1NVJS/e9VpzQ8pJv9h+7ID8RtCZKFNtGE4tzi4Giyhe1+KEgepvkp5g7/vzntiozUvquWwPlQQRL0tRyM8C4AAAAIQGfuHRH/wHFr4pDCp6RMJd7dQAPlOObTJ50unsAJGybgQAAACUBn7pqR/8BxX6U0rINRo/y4HRukwATSVZoJEon31rtn+VML2bwAAAAPUGbvEmoQWiZTAhP//3xABLObI667Cy84lACUna+os7SEwngcINGkfORxMX23SZVaZImud8o9eZmtkPJwIEAAABpQZvdSeEKUmUwIT/98QAgyOv5zY4VCfRA9tqAC1P0MgSuhHcWI85r/981RkMwAFI+jHCvdq9w65CUHDP2LEFnMmSNMlaB54eD5eR/kwBdY0cxaKN+crEnk48AQ06HL1hCdcgMsTzcef2BAAAAJ0Gb/knhDomUwIT//fEAEtpHC27ePMo2x8ABcLao0URrtNd2lXvAgAAAAGhBmh9J4Q8mUwIT//3xACDI6/nNjhUJ+5qzy7X6UgAfuoQhHnqXLw0a1AwfomIx9fj/IAJi3QMyo2/O6yPbOXr+vf4F9BpFsNYqI31w4noEYXBuy3bxabstXfUPMxA86k9WvmaCwsKOtAAAACtBmiBJ4Q8mUwIT//3xABLJheZxOZ4mbmPwAtb48Neqs6K3DYOyqoHee9oTAAAAbkGaQUnhDyZTAhP//fEAIMjr+c2OFQn5yB47YBHUADajKHpK2ROpVU48G4Lo/0JfCT0kiu8y0E/w1YqHjbNu+M0l7z+qcjCLPpUybSgKGawbuIU4SuBTXZMq1pRFWYMb1IdouBjSMSvYtM7ODn7AAAAALUGaYknhDyZTAhP//fEAEs5s7zu/bMcqABLJPYP1wVvzusa46JQ2EdsgvWMQIwAAAFBBmoNJ4Q8mUwIT//3xACDI6/nNjhUJ8QJX1SI7MzMOIAGxYQRym95PL5dtWoCN12xNWk8DjuRu+vpQH4NlQC2XT/WD2RtL3axjJMucH0P9+wAAACpBmqRJ4Q8mUwIT//3xABLObQXRG4AAtvU4yDXz1C6c86EDXtCgqQejnhcAAABjQZrFSeEPJlMCE//98QAgyOv5zY4VCfuaua0fMYAIRkdYTFAhPVdN/2IjEzifdpYVRK4lTGGy5razFEjAqwPz9UHQ5HGAPkFCopYBLf+d18idQAnYjWUmy4mhGi/l/bJeo7NRAAAANUGa5knhDyZTAhX//jhAB8t/5sItyQ1s92HIAbmdEyBGwgll54l1AH9cbDeX3h4tLE9NiXifAAAAV0GbB0nhDyZTAhX//jhADW2Y2EIcVs8/MLrnsqAEtvJWljYCKUgN4VJj8GzwolGvmO1KqAWdGFqbRGPbKsm56qwdUfpRhNfcloxj+8ufsrTsgDQ3Qz5JOwAAAGZBmytJ4Q8mUwIV//44QAe/DO3c4AEplzI0Sn/pUq/Pguwr9hcxoRlPI1Tddr77JpKWZWaOk2wz1gJ+jaUDA4aS3f1EcdecQel4Uaq7BzhLs1Q2i6jCe/L70D2CyEgedN1fqBQtEZAAAABPQZ9JRRE8I/8BHimzwcnwztYwAJNyEzTNAlaHFvo5NVLLnpM1w3uTR3IB09N1VE6E0Br66Pg1erZ84XYhPu2/8Nw1JgCTW4ZQa8gApw/UYAAAAB0Bn2h0R/8Bxa+KQwqnER9lzP7WzlgAIfON93zW4QAAACkBn2pqR/8BxX6U0rIOeLTc9xjWoAH4VrzZQYjASa6vKkSFrJWR2sVqMAAAAHRBm21JqEFomUwU8J/98QAgxqMiJSFjIJPMGSnACqna3dRHv4H4dXYFTwalZ3Kv43BxPoE0wgLFbbCnh+Xm9ggzCFCKfPoCVGPusIwIX8zEU/Zzq8WHwrTTLtWrB/J7wnRq9yc0pjSOdoo5qk+TrtHlw0S3OAAAACUBn4xqR/8BxX6U0rIOeLTc37Pg6TABCZVmgkSbnMpvQOM4E0yhAAAAOEGbjknhClJlMCE//fEAE05sjrrsLLziUAJSfqTOeJxRaFmQNGx14m/WVJa0203+Zoobac+j94ZBAAAAeUGbr0nhDomUwIV//jhADW2Y2EIcVs9BpMb/6b+94AJyiWJV0JjjMRE6zNj4H1bNpEomuEUnxPLcZefYNuGORHgz+qeaVQDVGgFO6KxcyAJVYSUxHHhJlegg88CvmkaT4MrkMwmJqfIc3iqcAaqUFLLO+6+1bHaxaIEAAABkQZvRSeEPJlMFETwr//44QA1s7Zi+e0JnGP3QBiZi+qWAEIz7Asu1UIIck2gpph9BHcff/2PPlBMpdVxmqz0edfVmP4snzhjqCFbJsYfjXBPbJkOUaV4Mz//nAjQu48rgtJ+ysAAAACQBn/BqR/8BxX6U0rIOeLVDCBOACG3q82UGIwEix+jilpuHq5AAAAA8QZvySeEPJlMCFf/+OEAKL3tRlxItQ9BXE3IFU6gR11R02v1m0RpLdCoUpfiOL+0comDX+IlF031xf43xAAAAY0GaFUnhDyZTAhP//fEAE0kn4ezajIGt/gBJKCEDVzs4elYIurvNqi/Vckg1WP6y9e49y4SH/kG2pm1qp88pFH+Xn4DhfWZea7NaGHDYZZraXIkdYWliM4lbLL6z2vP2qRH2ywAAAE5BnjNFETx/AcW4k5XkCle8I8WabTf7nA/xmyACdgrQhWCEiJ7GfpH+oSmAM63pYq2KLZiztemlZW5L+t3p5C4k40oe7bgWmAmI2Ogl24AAAAArAZ5Uakf/AcV+lNKyD/+jCCCJMjicAENnDUtvvf6LTmczEviT2c2SyL7twQAAADdBmlZJqEFomUwIV//+OEAHv0V544agAmd5K0M3E83krA2NvDGCTLuaUyX+mCFovexnY7ynd9ssAAAAZ0Gad0nhClJlMCFf/jhADW2Y2EIcVs9Fx+UCZC76BBe92lRiCMp1Lw0yyWA9kSedhXy2QnoR8HaZVpy2lZseNvzB+xz4NtniTKKPgdVDJDbo3FKho8Hhx/g0cWDV3bVDaRJtEwOo5s0AAABuQZqbSeEOiZTAhP/98QAT17gj4Ah5X7MXu2oi1I+OYoHTCpR3fgfI4Jk/XZc/mDvVO/okF0J38E2P5WPYMGBMjD7Umczi+DtQR8CzN3XapA/86gnhgqjXA9bc9EVgEmT9qBQhdrHgtG91uycm9IEAAABYQZ65RRE8I/8BHimzwcnw008gND/cABcNptATnsK37O67PsqfIB8e9vRd9J0EyAXPz3SDKQnR/cSaKifXcPg2/BnIs/p5pCjZvFHD/SU8f1f03j/fUj+yOAAAACIBnth0R/8Bxa+KQwqyfabSqA5QEACajN2TBHC3JSA2TSBxAAAAJgGe2mpH/wHFfpTSsg/xtN0ECVAAm3KnxiZeZJEN517Msi8NK2yOAAAAN0Ga3EmoQWiZTAhP//3xABPYFWm0DxPlQ4ALXUImtXgzhLhrCwFNgDdItynsTTLCf2no+2X/jcUAAABpQZr9SeEKUmUwIT/98QAgyOv5zY4VCjDeNtqAC1P1yL7D5YhNPsxNlh6Jt4Iqf5kWRWTbMDrOFundU662HjYQ0/mh5ybtKQYGCF5mIiVpRARd1oTxreulA9/LFwBOr5IrSac0jq+ruzZBAAAAJUGbHknhDomUwIT//fEAE+avB4U4hNQyABdAuKaJYzkU2Hka9IAAAABpQZs/SeEPJlMCE//98QAgyOv5zY4VCjmIM8u1+lIAH7qEIR56ly8NGtQMH6JiMfX4/yACYt0DMqNvzusj2zl6/r3+BfQaRbDWKiN9cOJT3zbEG7LdvFY5LDIRCePaCgwfbqCCTs2IwUaqAAAAMkGbQEnhDyZTAhX//jhAB+mr0AEtdjeo8QAXP+BTCNLbnExSoAFjlafHitFfDaSzOX2BAAAASkGbY0nhDyZTAhP//fEAE+gGTOXeABsjJxFoJgbjI0QP9Ix0FwQ0HIyWZF+UdcFaLNpCBMI0ObBjX4gz3EL4JcpHhktxsvIo1dCEAAAAIkGfgUURPH8BxbiTleQKWTBNzfAhjxABOrOC7VtCwz6wLcEAAABJAZ+iakf/AcV+lNKyD2qqhFdmHAAXq9ajAo6dqIKKZ5ac1o1LSZFE1gLfv6a/LsE5+RPrLxFi6cloXYwSbe7s5MUr72Hti7QrgAAAAC9Bm6RJqEFomUwIT//98QAT2CmZXSGJWgjVQirLMgM+DrHD0YUkbc5QUY+pGoKH+wAAAG5Bm8VJ4QpSZTAhX/44QA1tmNhCHFbPRzEvD1qBiADafJT7Qj4rOmROqMCYteZ/I3SzSSGRGFDemzluG6N08axQkHwUIQCe2uYlkiwnFkvn0oz5BhnsTevvslSrfOXAAJVA0u9SBcl6+Ub4jRD4WQAAADRBm+ZJ4Q6JlMCFf/44QAfrSi5zG6uLhvgA4siNVstmS4vMdu2+JAQ0GnTd2D1mLGPJ39exAAAAY0GaCknhDyZTAhP//fEAE93EYG4QACIPLfRnY3wmh0ml6cTM4HCmLlEk6523VdN9dnHPS47M6GqZv8MJcpBlfn9NxLftQJ1hR1Vv0IKbwN8z/3VWeRG1YJYQ91tf++AM6i/G4wAAAEhBnihFETwj/wEeCjnPkUtCRye2rgBKkAjeKlh+gyT2YrQWgqX9ZwNYX4KYw/KOUqT/5X+JANVj+nSaQo3LYYvW383ZyLOmhqAAAAAeAZ5HdEf/AcSH1hU4WEeXFEZKhyYf4AIfKs91mcMQAAAAJgGeSWpH/wHEyUZUb051WNvb6vwKIAE36+hD5J6w/kKB5FQABne9AAAAa0GaS0moQWiZTAhX//44QA1s7Zi+e0JnxnG+vd1dBi7wALMC1TNx0Gx/+rLBGSdLbo/semWbxsITNG1WQ2dUXjV8lbCLcFVQaSWYnePMd4JKBpRRebM4scLVlix3x75IUJBM2u6GFOdTdmyAAAAAcEGabUnhClJlMFESwn/98QAgxqMiJSFjJ385kcUvPOUdG+5pBzGmjmAwhDYeTset6F70b+3OwBX7AiNm72X11D+1yZxQEUubohhR7t4FbtJhvemmFOJahSMA1kbfF+1ZLEMWFldUnDktf9pHj0qcVoAAAAAdAZ6Makf/AcV+lNKyEApePHXP/AKmAADZ60BYq80AAAAhQZqOSeEOiZTAhP/98QATTnsF0RCQAQ+pD2sBqnL8w6gZAAAAakGar0nhDyZTAhX//jhADW2Y2EIcVs9CGf/tAA7mb2A2JD4B3KmBAa6SbbX4OGNGFlCcVXFhHxuQoVNDlND1UEwq/E1hRfqqLo8Lb2L40EAmyZ1kUhhXsxrdSs21HTvwVcs6/ZDd+ORZwHEAAAAwQZrQSeEPJlMCFf/+OEAHv0pZ44agAnHVIrZNmG0zt5tt8xYFTVGNi/5BxwEl538QAAAAYkGa9EnhDyZTAhX//jhAB8LRcOZ86IAN5UDp6EASuSIGqi1Mfk1qz4x9RHimHYC9XNHKHYKH30KNzSu8YYUGxhFWbZbgCV6Ar6XOD2dHviebzzDST/8oE2+27OZ441JVO2WAAAAAVUGfEkURPCP/AR4KOc+RS0IEDpwXtPemv0bwVl6AAh8DHuBfAwWs93WesvDC4kWzyYXt04G/QaHYXJ6asNjY95fd9trV1zCzO+j5HPBB20flvlJZY4cAAAAeAZ8xdEf/AcSH1hU4V8U+uzfbJUADZ6y6JYhgkpfdAAAAGwGfM2pH/wHEyUZUbzcCZN5sykagAbPWXRLM9QAAAGhBmzVJqEFomUwIV//+OEANbO2YvntCZzT1u0sAEQeTW+nsZe+ubT88w1+gBPhzZLInAlabKSBxD0u2ekOCKCm95PqtXbw0fYS5UP3kIXXhHqpN4Wy8DaPc6qRBIuzT+ctQNEB8Rae4HwAAAGVBm1lJ4QpSZTAhX/44QAfE9EPSWFgAnbemGYGvw68Km3HFyLWKJFa2PzSleHFHR3T03XQkJVMsibF8yeyIjqPM5oSi/G8QzbFKW651rdhAY9I7I57sIWwsbKhhWNTAevIwDMvXuQAAAFtBn3dFNEwj/wEeKbPByfDMS6PeFAlwAE299B4UdiFNWBUnKUKFmQf7pfLNVhXSv47fHuLUac5TEWVbsxu/sSw31swHDpbOGyBrk/cwb3xyi9O4/CvUSPDhHajBAAAAHQGflnRH/wHFr4pDCqcT7IlZHqlVAAh8rCYHD4X3AAAAJAGfmGpH/wHFfpTSsg548OOjHnKrMmACE5ZludVSwKhDVL0yrgAACj5liIIADP/+9uy+BTYUyFCXEJx8Ep+UwKN+Ce5hN/cUcQPwX9qGLTitgBXH8vblYtsEGpEFv1XI02/ieCDgxpiQLIo5IU3A9SuA9sn38zNWRcsrIX2RbxL5z9an4pP9HRtxncA31N2Jp2Zmgc8v5Zhhx1kdsh0v1jRNRPWPxFLt8VXRg8tFc5ZDxDq8bJHsMKs9swX/ZdWnlF8mpfjLAgF1jRGI/ntByfvGNMrgWFCU53L/q8NezkdISkugOoK6asJF7zrunpLK+cxIGPPDV6H/n2/mEq0KQdwonHkGhJqpyVTHf4j7FvJywAv9uawdH3GPnRGT20tfUjGZtSmpHAkG3PoaXqF9uaQwoKogpRctFMznrMpQZi9MkkZclzDU4QVorvtCztbDr+H4t5C1KXPJG2hGMVKj5ElaAbSFoOllK4UT6jH0xemSSMuSsF9gg3QFrBlALUDvcHtAkWwl3IX6M3RJ0/+uWTzI47YRVCeNDUNn/zJqvmwQ9w3mwjD2b/3n4gp6AfEbi2roidt8vYyfZL2Xf9uc87vaWBA0v/sXyIlCmQ+ga8FbsE0X/vHcoTqUvif2aWynIcipCk1EmfkMSj9emjzHqcZ+M9p6Vrismt3qTIR7486u7QLXt8R3m4DL3TyqB2bOdjK0x33EVqF9uPdSyjegwWc1myKz0xYI+k1rc654g9oaM05s0+MffpsuM92zLG2S7ZaKXRtyqf31cIKbi+AiRmycTxgu+4JNsn/zmb83P65BsTKN7EhSJXrIJsKhqkomn/Jwgu37Bwy1cPuRaNV0bDWvKwVVWzSDgAsrWE0bdDZe2v0gHf9s0CwOgrjiC16uk/krVkW7+/EIjnl9yYvLir3bkTBBTGhNy45K7fnjlTN/TsJFpMq46+FhHplM7co/MBeY1tbFgxVYkrHHrPtEQXVcYbH1Jk/XSmywggxekoZidTMqE90aHXkV8TKHrraMWQ2qU4qFhA/kPCCazu1dJnOBuctLwH6KDkuzL0LSJHxcj9OFermyymmS/FP3fej/n9h5GhB8QeLvBsYdj7Iqgg4zb3JL2YObTVN9Y6MkBciS6guuVnAWyXTtL9eXltdESiEoSpIN7XkrTj+TJ/4+MuK6XNAplFYlsIW+qf8QevGgHXd7UApU6Vg1W9PUs0Gg1JkzqwCxJ4kXMTKBuqVAskh47pjK185nOyDGM3IX4b2+R3VOJCKrhqp/XaXmjCNV0kamabC8xIUQyO81pheELLAuRYrF9SRg0Slm13N7ELyFLYsWQq+L6vCw8XWRbjUmpC07vlz0Jc/n+N8nCsKUpvv+YJIEoYs8ef4aHqljfoPoV1pU5K3GOK9fdW7ABb+Nv4pgbgwpAKG/OJu3t33+ejXkeUd4FGZolbUUDlvGvzPl5wBaChWq7awyjBbnEkF8waZDongEJCmXBfpmyn25q48YnBOjHLuAE2WhcpfzdBgvG6ygKXGjHF/8TDR3DbNyXME2bsHZwLyGeFtN54LelzHlefXzICt2/ql/TiDrRkMFgVlzrUmJmdAMMP2cWLyDtV1I2dbhoTamMUTjMiQgEL8aEite/qQt6juEfDMJk15ZbnhIX5GligLrjKib2uEFZ3OALxTUfOJ7/l3HDYY16/+tY3Ja9gXnsVAUAFyiHRF2YqP107eD03yaedBNZFKyniD2p3TRlq4ho2T3QoFlXsrDCRk5bSKjjV2yJ2ucKcJkmMDlS+re9Ho44bpGqm5zuras3HCFCsXZZy/DEXbQw85giTgjtG+6j9d8R/a8WdX85d7ZsYjrgmwU2I1abc3OQ4mV+YdjZOxzLc/CxsFmdGHzADk3vegea5e58LNjR3kUlJ/s+/KOrT0LK6xTPAjjem4NRxyEPzyTdJIeXBef73bC/HuDv2IChcPs/kVQZ+B2eTecaB/MgR3XjGclNvhXbPL6h1C5IaTx8yFnPjiBaBHsVgUgBxvVAeqHzjzVyOi/W0WOabh2kacPY+jB5ooxregvAwapINPyzLvgE0xa8zHeu6hPOtgL/DZz4otSfCdV3hghn6F5YGwSdnuTTckCvA2ctJyJ7q+yoNwYv1ASVug38r9LiKgJibfRBljLEMFCfvM9nZG6/q3BpnEqNKDPsK5+kxcmseDwzVFSoLesnZ0cOn9KqXEqkJacWat2j0mFbg3KrZcC0HYdCPwxDwR5hE0Qg9kcfoIH+mhoeEJIoGrj8PLJ7RQrcOWEshrKUzKNPevo4uSgVi+lMZgtTUXsXzOXmtlBD59ADozqv0N2GSzUfLgPYcMR8h8s7jocZE5L/3xmtYBK9XgAiE9beTFKiUl4xm/kylHf32mWwCzAlFXAiFiXPVkhiib55KVb+K/Q5D0CAS5xWHAOgtS4jNaJzPCE7PljouSuAv6dQ0u9yYHXzX3CeIlUKblSojcJRcmjN2pL0fey83Mu7tt+7rm15BAZ2VWwig6l0EVvne4/zkxP+jsL/ET45gVj+YHiGJERlFyaCqoWBdDREC/Eq+a+k4xXSr8eu3i2N/sSeU+y5pS4/59iiRuLrOrR5/Dbi7YC/eE1Zkh/SycKCt+0AHE1JhsrMSJ6aJFPfq1/0gmvjxZzHkLPJNYZoADN/QoixzakDv6ZxkDloEqmSX/KHpYR1bGSp9m0UGemjhQl3MRbqVXlfEmRLRWDnPmjJtTQwbPiNr+Tyb8NKv+e6rxtV4FVtQE6uTd29yVxhy3o77iJdAr1toWUOHVjV+gAyafQJB9WsAHoN+TRgq1bGVKfCXi/b36rXDI3erwOYBJiqHMEmt2dkRBIvsrYzkVUdjoroAzNmm4EeCfQPdcVcZNsXxOslemCwTnYi9oXlhISkKeN1+0+IGlfwBcykiRMJ66qwEGfh9Zbv5NKTL4REMiHQOBvfR2JbTxhBxAhWty4swdI1pRcwpM6/RJ7iNVbugxQI7Ah9q25ve9qWGsiKOBtvTxqjm00qsuJe0/8/5Rc/aShgHZs1UuLjARm8G6WA5PJfy4YTscrPHHxoBLR875zgtAgE29ZPxP1b3XYx9ah0yqRz+FGnEsnXc+QUne8F4IRWBcfiEr6hf+BiBeWdcXjj+b8ZnseW0JuUqmNlA4JRg95mDCYteXWX8NzJxtdJq8gFLxN+Wx1KlEgpTDDXjJ2qPZtL6EFStTR1cLyjMxbqD2wmq6iSDHNNTOJILMNE7dSRQ3V5M5tWMQtuesSDSOcdNmSK+zW28VLByftLaUxFH8pdetvJ54Fy4tx6/aK3FzcST3UMvFcrFZL4qe4VME+21AF0KfCAt7FW/AbILgBMq4wsTmMZdlIvqjKELu7o1rby1g5Ww0iDdmAWzSChcXEQVdPlMnN1TfxbmTnO/eMpH8xlqx6dBZWpB5d6IwnLLmkvJVACqYjdPA9afHemw00yI0WPQBEO1iIKl5lwxrmYpFTK8RFJlqUnPLGWvMZqRFgB59isQVMfL/bkUE+q5O84D1p+CFLfUUHoO4Lfg6V4FrGzaxeR/OE+uEAAACeQZojbEK//g/wuACDzUSZIIWMAJEPdBL95l2/9f07rP5/fuvVzfq/DE1xKTsoZ74VKIGMwiHELEwh90qfr9NFjfi/FY67goZStJPEhG1XjpkGtwBnHvplwxdWn3IcdDKwV9Jea7/dMxah1EsDmmhUOx/77lPi9m32TkP2uribmJ2KuR2eEOekIFe5oRroPQ1Cz9BOzPVbrVKW2yb6rcoAAAB9QZ5BeIT/P0XUCiEwmqOx0f2EUhKWbJ6MAFbYc//n9jY4WPuo6d1OsmyoCA2dYing1hnb/DAmxw7A2gGF25baxpS+oGOj6xRt5Yau9HfqDz08fHK9o/I/UOHf9n96fkgW9HGZvNfTy1dwzkd1i6oGVoM63e/Lrt4hLoA/etkAAAAfAZ5iakf/AcV+lNKpwg1ANNYgKt/+YVv8AGz1oCxZpwAAAEBBmmRJqEFomUwIX//+jLAHM+VsAC6VG1WXQtDFfwEMndsoiBpQl9BkGi/Or3qkz98yBXTVYD8uzVbq/lKcvfOAAAAAeEGaiEnhClJlMCF//oywBzO4tqOqr1eY1ZglgAy71KEwaTzMu8TW3i+Igzp2iqa8yjzdyC1OVNYsj6+rk+xxb+TUDQKuYTgVpKn2L8iRIlKBYmTDdGM3X6qWsrqvPJRDS+QNz6U0fI2lkQH3wH9FUDOnfTsRJrwhgAAAAEpBnqZFNEwj/wIK/MJkyMI+EWiK++zVXsBLNhP0ACDyc94Q4eVpy+BOkPv237nyGRtmH+mjCyy5xQ9Bf3lOs+XRBLf7ucle6++vYQAAACcBnsV0R/8BxIfWFSKEkmGEB7PrNl4ANbAyE9K/PMbUadVYdwnd/4AAAAAkAZ7Hakf/AcTJLXXrhucC7yq8dEpyb0dgAQ21LxUaa/0tWjL/AAAAc0GazEmoQWiZTAhX//44QAecnPghcHBABt5nBZhNURYfqpaXBpLdTo/HNJdNhsOQRMtArk09JrObod0JXMO9DHVK6n6yLKjElaRT0iAaK6ujcp9LCPS8RZv305J7N8xrKKkDRkQM8XdowRyOfgpjKKL3XwwAAABZQZ7qRREsI/8BHimzwcm98WIp/VocYUT6ZXsgA2XV/WvXIo6mMo85MEAUxMGdAx5HfEi0/kYDHRECA33BVUfDMqwfIf0Q3/cSytArKERtKJuwQZPxtPzHolEAAAAhAZ8JdEf/AcSH1hUihJJ61/CllQANh7i2TdXqMbILvY0RAAAAIwGfC2pH/wHEyS1164bnAchz4cNqdhUsjqawAGz1l0SwmPihAAAAZ0GbEEmoQWyZTAhP//3xABLkY601Pq8AJiL0vB3Gc4AvIMvOs6cTNCOugXVE9yd2rZ3foN49pQ321mqNDBs741uF/zfevtpf19l4JiYQ59UEGKrD8zbKOrqNYTNcA1mM8mGutmp6njEAAABNQZ8uRRUsI/8BHimzwcm98Zcv6V0wYAFxc9r62zib/mVJXZRFXKRCtjyjJqPqJtUdwba8lHd3qZ8FrKj2keggXDmtMe8DXGGNqzpLQB8AAAAhAZ9NdEf/AcSH1hUigysiu0yojeT3sir0AEJlWaCNUTTAAAAAKwGfT2pH/wHEyS1164bnAO9QeMdUkunoACcZUm4boWdqqj0t7nfc8NWh6MkAAABoQZtRSahBbJlMCFf//jhADWztmMKtI7P87BWEjTr1dD/cYAadoTOvnTZAF0VjPiSWEp0LEICLS1CO+/GQ4SVkAl//yN22quqvKFS9Yj9abX0aHf5nbHroEo8F6LOEwK93V8xeQ+EWbH4AAABtQZtzSeEKUmUwUVLCf/3xACDGsrtrK8hWlli3GvPNbJDVBv3Y/QAkicG5H1G6yW0IypO4HpPbKr9e8SZIYZ0aHDhCQEtI+0cXofBoaDk5ajUF41CBT3cXVbzqTvNXtT3oKf6vZJhNxpwq652b0AAAACABn5JqR/8BxX6U0rINCo/SfIeNgzOjzgBDOt4M+UHI8QAAACJBm5RJ4Q6JlMCE//3xABJOewXREJABD66xEfJzrixsSLMnAAAAcUGbtUnhDyZTAhX//jhADW2Y2EI920Q69TRIrZzQVTACVnQ7YewBUyN+y6P/YsNTpLZpUjUt54P6f1VsAds//loKNXCw4wJIBQEiOg6x5Jei+9GKzvj4C94bogEVE2xXNVW28CvEDMr9p2rBJXjTYO1lAAAAMkGb1knhDyZTAhX//jhAB2dKU2om+BcuAB+K5PXFdGaHTX0ze0DBAS1SaMdYfQinOZGAAAAAZkGb+knhDyZTAhX//jhAB2rRcOZ9KAAEpx0BWICBGkcbu+2J7szbRpE1wXJOwvEFAbYR7nSenzST4TyzbJ3E3JoV9TQwsclaL9prVDr0niYwq4CFZZbJPm6ncwYXkMlIfIVstdDolAAAAFNBnhhFETwj/wEeCjnPkUs/iZxJ21omKaD0k6iBACHdVaJa5PuBGZx2ARPQrKjCbC/N0iSI2ZrM5q7DCeZ20Mv5ifRtxDO9w6Y5+M3eknCxLZUuZQAAAB8Bnjd0R/8BxIfWFThNeC46nJgxPBACHyrNBIhgkpg1AAAAHQGeOWpH/wHEyUZUbxL5Q7k5ezkkjUADZ6y6JZlqAAAAGEGaPUmoQWiZTAhP//3xABLuia4aTpAeoQAAACFBnltFESx/AcXu3bqmIT2eAG4Z0JpY0oASk+gHH7KRujUAAAASAZ58akf/AcV+lNKxdOrKuR3xAAAALUGafkmoQWyZTAhP//3xABJObP/bsYkC4AAtZewYcK2bg2MwefX6DFbkjBPkwQAAAFxBmp9J4QpSZTAhP/3xACDI6/nNjhUJ1QFUJXgBUg8iAgAfihNZ/NqB98E416gi3niD4P9QKXavlvlHKmf6xaylBhW6jd2ZMmND1Zh1sVuqx2PbTa/XcSacLbP2qgAAAC9BmqBJ4Q6JlMCE//3xABJObQHUxIALi+OsGtEbt+gdhjq9Las5x0rJEL+89RftvwAAAGBBmsFJ4Q8mUwIT//3xACDI6/nNjhUJ2vSm1EADP3W/U30GYp2RjmU7j072oX5fYSug4otb5eOnIXQ5hcN87AvanXTrOSQ0EKU9CipHxDzlJo1ay7a2YIXq07mHrmyNyrAAAAA7QZriSeEPJlMCFf/+OEAHn3/mwi/KvqeACzyWLPx8goiNdDgojOvxwDHaYtfNK8QzywnGiVv2hWv79ksAAAB+QZsFSeEPJlMCE//98QASzcJ0AgA3ZH0Pto+i9p0yClenEsgvoy5RlvTiZoHEufskl1BQl1poBf68fp8uHUojtQQi7ixkjo4bDhhFO918PqNklenXBNGvGe/bUcQXQylWbneLdfUKKvkCiuy09roeIyuYtbI+i/odfufmHbwxAAAATUGfI0URPH8BxbiTleQKU6Y27JP84PnaAEsi4Uz8xJVLQPRsoG8g/gwQHl3i9MRk1cpltr+Wlw4ilHnWkCZXQZWW8V86hn1cgBDVemWAAAAAHwGfRGpH/wHFfpTSsg1Gj/JMLeVzFS6lwAIeQV4FxOAAAAA2QZtGSahBaJlMCE///fEAEs5sjrsqPm4AWt8dTH/LI2EUex9hSRGZtS263yNuuvP79iZ75+OBAAAAWUGbZ0nhClJlMCFf/jhADW2Y2EIcVs8+g8LOEAEqTETY7fBa+lPddrxb/n5CuaE18B4O3YO+prEzne4PMSFRzb5FBp5kbB7Kt4f6ZluOnjHfitmzIE4T66t4AAAANUGbiEnhDomUwIV//jhAB5NFTnMmm+SAD8Me6BOdYniGb3+/1AlndyA1sVqDDKmyznBQvokZAAAAeEGbq0nhDyZTAhX//jhAB59VZZy3F8ADaC4GVWfHbsUyTULxphCFjiJNYOQWyRV92AQqGwF0l+xHGM5YBX0yqbou7chZ6AxR63sXpTnkXesHqN71zMANYTvYMC0CAcCMbOGjJaoAdjSSP0lhQ9MD8Z+zqmR596yUIAAAAFRBn8lFETx/AcW4k5XkCk61Bgf5MAWACVPMchxdejnjRmvxc5BdUffLbFqgQ46La1K3kgNAO2HPfDLl0BPxSYzS7yzS4FVxrXnJ2xO5sKw+BvfQ/uEAAAAkAZ/qakf/AcV+lNKp0o9QmluhRF4QgnrjBQAIbBdzHbOtzi87AAAAa0Gb7UmoQWiZTBTwn/3xACDGoyIlIWMaIuIg1eXABDudB7neXmt3TG/Be3hgsT/m1OX7OV48wNgxexIraKQTUFUh4QtXiiydSyFMcY6wtIOc/rXdYOGVcgcZs8//XsoIoK/wm+hRU5BJMs1BAAAAHgGeDGpH/wHFfpTSq0NFfp1QIa5j+WeAANdv2jy8MQAAAGRBmg9J4QpSZTBSwn/98QAgxqMiJSFjGu6uOVTl5AAnEngT08OC9bXQHf89G1ZpbgiZ79bdFps3l6hyxmdobKvc+EynGB1Xze1ZHxH4QG01oEf63dRD8fpwelRcyu0slNKovn7AAAAAIgGeLmpH/wHFfpTSsg1GjFSPL3znkwANiZxBZVd7+lq0ZIYAAAAuQZowSeEOiZTAhP/98QASzm0B1MSAC4mOvNFLAIg912ILnDyUt008fmMYhz9/kQAAAFpBmlFJ4Q8mUwIT//3xACDI6/nNjhUJ+YuOoYgAaAmZUR3xIXUoIbfKEFyHczJ6/7e6nYfTSeCORonZusZWRLJK7Q8VqHLjpOj5ZBA2V7asD2XDH/P9sXX9moAAAAA5QZpySeEPJlMCE//98QATboms22TyLfoAa5R4iOBvqDjWFzEjzDaSUzYgW3qs+5GWaWeKz56bD3pwAAAAZEGak0nhDyZTAhP//fEAIMjr+c2OFQn7mrmINPjgBLbNpLOhu4PgKrsb+a7l+WCJol5AYKPZf3eAvKksQTAYmNFkzlEYtc4BhbEIBHWzzxo1Z299rkE7tzXF7mbZNyPLyUOj5+0AAAAoQZq0SeEPJlMCE//98QATTmxHqzny5mSbABxieB0roDqA8+avC0mFoQAAAG9BmtVJ4Q8mUwIV//44QA1tmNhCHFbPQhrlpwgA48+jW2C73PENx/ct4gFUk3+d+k/i6xEKUA1C/iowJ+sv61BvPFe/VHGtWuZE9RUSSNM654EflYs5REWWrV0T8+GIfhaRGQgpdCA8Wsm8kpi7PxEAAABqQZr3SeEPJlMFETwr//44QA1s7Zi+e0JnJimSyACVJOLcsRDQSYh68N1OhLuB2s9D6QV71WRa3LTdbkuJF1U44omuAQv20huS1vqWEEdb+kW/zHrWBfeEpkvmdLcaowlgBHY8nUbKscVhtgAAACcBnxZqR/8BxX6U0rIOeLTc4VQCCABOLOk1MO/VH/S16MUmSY4w8ZQAAAA4QZsYSeEPJlMCFf/+OEAHv0VjJscrI1YkALcLpUqgWwnh8dw6Cdk5xD625jUTCaHpFRveb0l4JkEAAABiQZs8SeEPJlMCE//98QATWi0HarwAltdsoJuTI7CRo4SEd82AfMqe6pejJX7P03uqXnhHkaulstJEbYqhSjHUGowz/sGxN6D97XvB/+mWEnyK5V2FC7ZWVIz2MsiotEyN3cgAAABNQZ9aRRE8I/8BHgo5z5FLQEKwn/zWRXLgARAzI0q3AdSq5jdwTENhmG2I+pP0NgUFMWOCEYLbsdYOnyPYt6LRP2cV3LcpreyOiAcntwsAAAAeAZ95dEf/AcSH1hU4UrkP31FizGJgAhMrCYGZYX3BAAAAHAGfe2pH/wHEyUZUbzcKQqxg5O+HABD5WEwO/1AAAABvQZt9SahBaJlMCE///fEAIMajIiUhYx5EQEW77ayHcAITHKYemLWpyrdJFGx1lc055c03D/TyTU1+MdqjdyztEOOZcT7nFmH6YVk6Xke8b3Kqmaw9r+M9rlZzydZqowKZfZjmbY8M39nVfK3QiDLhAAAAJ0GbnknhClJlMCE//fEAE05s/9pF2V+gAPxVO/8pqS9tgav9ZTKFoQAAAFtBm79J4Q6JlMCE//3xACDI6/nNjhUKFQAttXf4gAfWUrP84bjQS8H9R/tepy3yeBy9f6+x5CTQRcetTM5U/8E5cdbXY+HGi98ENCZW7UjN5slqxzfVrZUnR7KwAAAALkGbwEnhDyZTAhP//fEAE05tAdTEgAnHO+jIAI3fnOVTZt6W1ZFuRH6OMOsj+QMAAABgQZvhSeEPJlMCFf/+OEANbZjYQhxWz0KFgsroAHPim6g2zBlFMH2oIMMT0CoeytSg7Hq1SyzBLoG8YWv3jiTV5KIwj0Q3HQ2vqH9AB3plRf/21dwWEsBjACTDSKNbXJeAAAAAO0GaAknhDyZTAhX//jhAB/d/5sIvyr6ngAs++RZ/YsxJO5LHFoY69CcYCNRdwPZ+7Nu98Vkd7fJHHfYrAAAAeUGaJUnhDyZTAhP//fEAE9dKILwAN6W3Vh/koC/CQV7yvRSOSZZg2JbL04maBvGmWU2lfhtW1HvA7aeSwz3Z/HMXu+KZvc++UFxIk2B7I5FQfIAMC6cr39zvXajq7YHdIqt6XuL0p0F31Q3yTuzxRD/Boc5dTrTxuIEAAABLQZ5DRRE8fwHFuJOV5ApXu1eyf5weuYAJlFwpn5iSqWgejZQN5B/BggPLvF6YjJq5TLbX8tLh2mIYoE0FHh7aqkFyzqTdkbhU6fK/AAAAHgGeZGpH/wHFfpTSsg/xtNx19SHT/fUuABDyCvAttwAAADtBmmZJqEFomUwIV//+OEAH60U1lJW6QUALXAJWlr9S5EBuP12QYban1gVcCdaImV8YEUI678oSPoASIQAAAFpBmodJ4QpSZTAhX/44QA1tmNhCHFbPRhbqzhABKkxE2O3wWvpTDxHeLf8/IVxuTbJtTUdh6qLpOjLU4l+6z66U8kigY/iuYnU+y8xQEtDUe/zd2aAyJdg5iIAAAAA0QZqoSeEOiZTAhX/+OEAH60VOcyab5IASoPM2nxY6jtbv8952L049EoCc0R/35r2PO+iHgQAAAGtBmstJ4Q8mUwIV//44QAf3VWWctxfAA2guBlVnx27FMk1C8aYQhY4iTWDkFskVfdgEKhsBdJfsRxjOWAV9Mqm6Lu3IWegMUet7F6U55F3qX6je9xQx89mxattk+LFWhyenIZoUnc4XCOtKHgAAAFVBnulFETx/AcW4k5XkCld4Ri2UQBYAJU8xyHF16OeNGa/FzkF1R98tsWqBDjoRD3m0ZACYeCenH3RrNbBAGY7rZi9TftOejLMqE2yBGkcHOiG4TU1BAAAAIAGfCmpH/wHFfpTSsg99ZUKeSYAmUwAQeCZcxxat2Op9AAAAT0GbD0moQWiZTAhX//44QAfp5TwEVWNM7JABe3RVq+/VRwqhFRkbd/VTHoqIB4N/GPX4qhu4O+vwb1A5rerWL1neYL7r/lNtS7e/lmb/QhEAAAAiQZ8tRREsI/8BHimzwcnw2+7vZXMKcggBCZ/wDg3agt90QQAAAB8Bn0x0R/8Bxa+KQwqwwQ4dowI7PACCDM0yYE2MRZA4AAAASAGfTmpH/wHFfpTSshF8y3Rib3+akSAB1WyRMZaRdzirSnjCFXhZg84PpJfuDUO86LmVPuNRC1jP6y3lZLmO3dZrdyhBkILonAAAAC1Bm1BJqEFsmUwIX//+jLACESP4kOlUHzAsyZmNdAI4Ydaq5GVx/DK179xpk+EAAABoQZt0SeEKUmUwIV/+OEAH8zoGdRK6IAMpp0BJi/DJQNPl4QX0aoV1V8qE9RergEmIHicj/BE6bQV4PC1jkdtSVqC/7rsDFasltj+GG3ATWSG5RUl2ra3nYh83jOjZQAUxXsRD6wN+vYgAAABSQZ+SRTRMI/8BHgo5z5FLQ1wpvqQ/2AAAiBoKJFeW3gmAfBmadtyv4ZdcPA4xvzeL4OAhaJnnLtwU6MeF+Iaeli9ABMYcBAhw5SLXtTBW/X9j8AAAAB4Bn7F0R/8BxIfWFThdKT67ZfYQAP9EbrSKfrF8sz0AAAAlAZ+zakf/AcTJRlRvdhAcTqTWO2vwABtCa25PWXCuDaxYkob7oQAAAFhBm7hJqEFomUwIT//98QAT/k+1kvJ0gBI2VCw6ZPQgl6KvGtOyDdIvq1zHeoRhbVuEmWnfoBGtv6WSPOgkllevBpPESnRqXv+hUhEdbZzdBogT9WJj79iBAAAAVUGf1kURLCP/AR4ps8HJ8NX0q/04AWeVeabLNv8Kdd1cNaCMdPt+Y4a8VZiJC9DBQm8Q41/0UXBVejMOYHB4kviN0Maa1eujn655Eq5cCmDBWQGF2RwAAAAmAZ/1dEf/AcSH1hU4WEeXG5m6gAfUkWjqgW/6Lvpy7RyGBIF/Q1AAAAAiAZ/3akf/AcTJRlRvVSwoceN3gIAE1GbsmCa/N0E2MRSBwQAAAGhBm/lJqEFsmUwIT//98QAgxqMiJSFjIOpuruzvjABas36ynAiwXCPQbK5QPen2NhQ0giQDgaeY3U96QCJylD0hzET2PSB7hYd/vGxJNMVIIjMrHu/LNbQOC8e+ssfCkTCsVjNw8z9lYAAAACRBmhpJ4QpSZTAhX/44QAf3f+bC78ic5yqPoAL0HsDaPK5D8uAAAABiQZo7SeEOiZTAhX/+OEANbZjYQhxWz0Kd1qycxAB8zp/9CK79RWBYYXJr9t4PXo4kj6R5vMOSgWutnZxzVNjPZGKxOsfb8Stj+cSD4gAzI7Yu2WZ5tCScsQY/k227xABosrEAAAAjQZpcSeEPJlMCF//+jLACABfAkaE0gAy1kZFvXJThN3D9OsAAAABpQZpgSeEPJlMCFf/+OEAHy1Vlm/KcXwANoLFTjIFj0YJ1ZoFId/NYA3eN/UXURi/fqNbvrSN6RMJN9Ka6nKQJrWXywKLn7VgxQL9I/mr8Qd/cpuvMxDkM+zYsv0EW1PYBTTUQ+jXly48HAAAAWEGenkURPCP/AR4KOc+RS0D8YAClgAhoWMW41wEeGBUlfI7Gf+x92mgt+reBkG1pMh5Vvax/a/FxaQ1ATv9ZP3yPJ1NfCtKZJqbvEaRVJkrUcEcajQEH1lkAAAAfAZ69dEf/AcSH1hU4U2e+e1hBdUgAh8qz3ZuVIh1cgAAAABwBnr9qR/8BxMlGVG83AQKsTCT1lxWAEJlWe7iNAAAAa0Gao0moQWiZTAhX//44QAfImmEngCwAQsda0Yb774ULgAIGO0gmHf4V3u7iZy19OTueT3zszBnWQzbU/ElOGh5kQ1yYn8jbeQWWTWVnO4Y7IGTwJULVN7uXTyTDCIs3vF/GwLg4fTbXC69yAAAARkGewUURLH8Bxe7duqYhRDVu0wj6EkAD8gSgfG3dLu7nTk1qQo2KXZ85rJrrwS2N8399Lk72wn41Vo/JSFK2bNvFcDDfgUEAAAAeAZ7iakf/AcV+lNKyDnjw46M8aFVAAh840Td2qAe5AAAAYkGa5UmoQWyZTBRMJ//98QAgxqMiJSFjH4AxEEABwUvHINZC3zU/2D5EqnIyBkzikpVPIcaSY4wu6I30JELQlMKO3u1TqnQebDvKHQrtcSXq/TnCFguQGjQ3ii+kfLNm+erOAAAAIwGfBGpH/wHFfpTSsg548uMIiVAAhstOhMWE3h5sb+cqDx2rAAAAPUGbBknhClJlMCE//fEAE056IS7K8uVZwAjVU8RKfzxCJLOi0fGYTdR7B/8+MLmvDm+dV4e0qRC5sbXVzfUAAABwQZsnSeEOiZTAhX/+OEANbZjYQhxWz0Hohn3JhKAAJneOZh5xLWn7u03u/bls5Og3krabY364jRQzhMUwyiXgeQ/B8W/eYhloPH7PiDOJjmtadJN9wZdeAvqaNYLnIMiZW/5FHCplcz28x78BNEXVnAAAAGpBm0lJ4Q8mUwURPCf//fEAIMajIiUhYyDv+9ljyMUFMAFkRCW4FeKyHcnbK+UK3prMwYz4Vviq/pPhp+GlCxPZrY0tl518ER1Q/75Q6jEYiCwwxOBMgb9zEDipWI2T3cc41UdqzqP3pz8RAAAAHgGfaGpH/wHFfpTSsg6OVvxtWphfWVtAAGz1oCxYBQAAADBBm2pJ4Q8mUwIV//44QAeTSlnjhqACETIaphFpetzFENO2XztsLCWzp8b7yQMrtqkAAABiQZuLSeEPJlMCFf/+OEANbZjYQhxWzz63lCNABC9Nd8PWT43eU4f3hn2qkLa6rvnxPJD3/WlXNIhqalAV7GcHWWV+kfkDfzofKXyEyTf/c6nfG8px4HB1RUdArNCDdobO7NUAAAAuQZusSeEPJlMCF//+jLAB8u44ypTSADKeFHIrb8yWmWUcR/Rdd8SsY+xP1T6coQAAAF5Bm9BJ4Q8mUwIX//6MsAHyq8uPLpfibcCfQALrq5zmddvvdNu/Ax6Pr4MjqyNuR/1Ubrj/8i61mSOfSY/qWU8cxXoB29KyjboAe8qO605yVQnjVdJswSd5vot/S+nLAAAATEGf7kURPCP/AR4KOc+RSz9EbQfM4+WAGAEHvqd9NFz9Uc2b5kShV5jzxajPdXXqNOTwgdq9lh/c1D/ifDI2Sfj9KYepLTCFQRQBzxgAAAAmAZ4NdEf/AcSH1hU4Tye+esaztogBDTPs2Stx3yfnzFhbDyt+wUAAAAAdAZ4Pakf/AcTJRlRvHQECqo/dySRqABs9ZdEtCCkAAABpQZoUSahBaJlMCFf//jhAB59VcIsv8ACpPOjsVIV8JHZOvGIu0Uwmr6ozn3u5PO2DTFnJA7CY4a3U11bnEUP1bcRrxx3dlgCB4dcCrvkfWNuisA3UwmNBe9vrMSdjMxhkCrxS3/R1/XKEAAAAVUGeMkURLCP/AR4ps8HJ8MQKvitEYuQMjuAEKNBRpAjKgi5s8EakqQ6z0xX0gWu+noKdDoLo6gS9VsY9hNw7bxS2Q33xR+xaaH053XT6p3FuSep9ccAAAAAgAZ5RdEf/AcSH1hU4TnkJ1hR1dD1AA0yP3WYsil+1Jh0AAAAlAZ5Takf/AcTJRlRvHQH46u0RaxaUAGx67EwVzgilOThBOw9ScQAAAFhBmlhJqEFsmUwIT//98QAS7om1kvJ0gBI2VCw6ZPQgl6KvGtOyDdIvq1zHeoRhbVuEmWnfoBGtv6WSPOgcHJBX2NiEJi7QG+9KR2VXRdtEz02RmBeLjfwxAAAAVkGedkUVLCP/AR4ps8HJ8Me8nL9gAOBDvNNlm3+FOu6uGtBGOn2/McNeKsxEhehgoTeIca/6KLgqxrgOGpoUVHrxnGxS3WmZRGT5jDoYWFzGoYar2LlfAAAAJwGelXRH/wHEh9YVOE8n1HuCgIAE4vVHGJl8IrVKxDjRsUSpoo/lfAAAACEBnpdqR/8BxMlGVG8dAfkPtgVNQAPlOG+l1vXcpAbJpN8AAABqQZqZSahBbJlMCE///fEAIMajIiUhYxYurq7s74wAbdp4iTojn+K9rKV0EEFhNxsUp3jeqzN9rnSD0Ml+BCAj0NWHOID/27OrtaDs5gAD+P6pBr/m2xj1ykBkuEXzqJ7eWZJuwy0hL+RcqwAAACBBmrpJ4QpSZTAhX/44QAdnSllbOcqTUAHM7VcCoGLUoAAAAGVBmttJ4Q6JlMCFf/44QA1tmNhCHFbPO3aWrJzEAJN9+Ey6KrGYA4SmfjC2NXXwo3CbI+qW/TJC0UqlTuzjq/oPhCIQ8H4qRCGlZiwFBS0DIKUuDc6kmJLawUutmNh8aVrGhZi1UQAAACVBmvxJ4Q8mUwIV//44QAeff+bC78/zY1AA7HargVAxPbx9MUcyAAAAa0GbAEnhDyZTAhX//jhAB3NVZZvynF8AD91FUkyBY8Vg0Vqb1wACux43eOcG9yEiK/woVXpHx2vmeJx0syOyfB+a8OwLAousOeHDEmhYgH/z6JtYlMUCzp9f+2DeyYYBZOO/9ARcQ36x7lbvAAAAVEGfPkURPCP/AR4KOc+RSz6JAjDZrELABrGtBw/RgPIrKkHni2x1rxPvhMIjRAzRU0TfLKe4PbvKMEUwtcfL7BfEJV4fgzHCNazE8PNnZ+1Yo5F/IQAAACABn110R/8BxIfWFThKTpMbBf2wWAA2esuiWIYPXmKagAAAAB0Bn19qR/8BxMlGVG8FAhjtXZARAQAIfKs7DJdygQAAABVBm0NJqEFomUwIT//98QASU1+q10oAAAASQZ9hRREsfwHF7t26piEqF3U7AAAAHAGfgmpH/wHFfpTSsgwWlPP+psuKgAh8qzsMj2UAAAAlQZuESahBbJlMCFf//jhAB2dFeyoTYgAh9fPJ2YYDfFhYO8orEwAAAFtBm6VJ4QpSZTAhX/44QA1tmNhCHFbPO13jwUgAhumZ240ijcG22GVAUkSCXMvVDDG1Tq9dn8yP0yK3E4QYw7xed5CkCQYP+3wYrS0e/g0q7erN/dRyqdot8tVAAAAAYEGbx0nhDomUwU0TCv/+OEANbO2YvntCZiCXJdAA4uoQ4X/BD/eHAqWrqPx8UK7SjSIJ2+wNHiFj9fQEDPPTjjK8bUvcfssw0ReNnC+F60kauMY4Prvp7ychQAot9PTj0QAAACABn+ZqR/8BxX6U0rINUFjMl9mRvIAAhNqTixC22qGC5AAAAF9Bm+lJ4Q8mUwU8K//+OEANbO2YvntCZsaJse7JdnAASnECdFwglC/Jqcg7741V5+f/PNOhuJsABCvke3UmZg+Qxp5JDi3isZEN1FPX3a5tNYT+iXMXqh6WdNv7S2TN6QAAAB0BnghqR/8BxX6U0rINCpErXThCMJIAQmVZ0bCDgAAAAHRBmgtJ4Q8mUwU8K//+OEANbO2YvntCZrw/G/IoAOBVHY7s3PgdccCVwnSorym0ndk0h9BuPJbftijyppNseXE6k/2MRF6ne3TaHiW+hpoZCeoYR5iiVstNYZuPS9DL9xLknWlnH0y2v98wh48cLWTVvg+rewAAACEBnipqR/8BxX6U0rINJAaWKIIlQAJqMzTEFE59HEJGybkAAABlQZotSeEPJlMFPCf//fEAIMajIiUhYxmsT+RzQA3Xlv1kidTNLx/9b8LZ/hpk0L1u1NE79z1JCgFy7j3LnSDZuqcYvp0TO7OrwIgF70mZK/JDZ9asNMEnBqJQ1sxKqgFfFCzH6t8AAAAqAZ5Makf/AcV+lNKyDRlcQoTgamACZXRasSXJlcIH9LWORq/vvtu3+1eBAAAAdUGaT0nhDyZTBTwn//3xACDGoyIlIWMasxg3TIyaAEzHXtp5yG2+5k1C+ky1JhOoFz8f0qU2fi6ngYpZijKhBAlmJVCwa7vp7SurmDUx/+k0cqtU99bvfTR8jFDNtI+5yvutyX1XScQ3g8q/5ALIFNIdX5w5wAAAACMBnm5qR/8BxX6U0rINRo/y3/IF8uYM9gAeIvZWFHzbuGTavAAAACtBmnBJ4Q8mUwIT//3xABLObO43Bz/3bdEEIAWq2SuDh6kAZZXHXsqbgPf9AAAAUkGakUnhDyZTAhP//fEAIMjr+c2OFQn5066GGBgAJ1dQ4XxcKoBcamd510JXOWQOMBiv5MTvseGEatBPnHDqGWdA4WHUdfyEylZRyqTqnJd4+zUAAAAjQZqySeEPJlMCE//98QASzmz/2X9JkgAAm/PMZJwxVGz5Y6AAAABgQZrTSeEPJlMCE//98QAgyOv5zY4VCfe3yuKUFgBMud1E6IjbOCAoqIUXHbKnlkcVfzg93xGEgD7sUk+3q9cDDRCpxQ1W44xljdM3sH5bf6nx4Xmv9Y0CE0wjmie3RZOxAAAAM0Ga9EnhDyZTAhP//fEAEslZp01DhtH4ATLTsMGxles1p3lKl4gaB2tMtmIGPZ8WHt8hYQAAAE9BmxVJ4Q8mUwIV//44QA1tmNhCHFbPPzC65tiADlQAiVjXu1gzTGlmYmIr9VtLsfsdr2aFBnXdNlf8ZZqdXbs9t4tJc9noJEyJltUfgn7BAAAALkGbNknhDyZTAhX//jhAB5NFc4etYFy4AF66o6dPm1dNMeGUGoEm7gs77K0z8W8AAABZQZtZSeEPJlMCFf/+OEAHn39NmUACAA5XFs1pplHgT8cceFW3XzpdHMwhbWveNYaPDaWushp4NpI4gkA4miErS1g3ijFe43AvhNkBwFQsu+NV6Yi1Ciu1odAAAABQQZ93RRE8fwHFuJOV5ApOTYjnFaAABM1Ot00MsvnIAKMWGnq173LVSXAjvYIP7CipJgGGeh1qps70EPLlCG0NTo9fC2mioLC53ctWok6Kk20AAAAcAZ+Yakf/AcV+lNKyDmCJ6NeNmVgAA2esuiVrcAAAADlBm5pJqEFomUwIV//+OEAHv0VOcyab5IASpMRNlRElaai9OKvY14FakZV9qzGQniODIPIsOyxJ/YAAAAB4QZu7SeEKUmUwIX/+jLADeXoUJkSEKhT7kUOngA3xrFhLWVS7h3pO7wj6TcpjvpE3He8TvuynB7G7j7Tkm3+V6ISrcfkdD+CGoUUqQC6E09QY87ih0yVbPgxts0Dz3q41SNpeUhB/U2hr+O6JDRiOiKC5sE/gr6G3AAAA9EGb30nhDomUwIV//jhAIjroU2ew98wswBO5cyJP7SNqz1HWuypPDsSXf940ACbuUUzOQr839qJhPez5BfxC9Kvj4uYCb7A4amTmcdMi4xJYfwGIWJCSzp6UdbzFYPn9e+eMZK7vwpa/gN89eaz/Y6oqH4aEl3d88xKrf7cVYnSW4ZJJZNhu6iLBrvgii43XM1XZltlOIXNS42NcZ2mMYxbbbRsUEQIpSbe7kdmilgpuqt6vVJgViNof/YsoTkBeKR0yDqmfvYekGCE+RtP7TBW9VKpYsppki40oiT8nLnh6QxYWYWRNNneAOWnIOvcHKOmLN7wAAABSQZ/9RRE8I/8CW8h6brV1sguTyvM/vV/UpHwQAmSHT+uxAZqiGnYwEVVpheRCs8ZH1J3WU79/pWRgp99Hy/lUsk2JaiI3n/fqiIGAOODxFJHuYQAAACEBnhx0R/8Bxa+KQwqnETCUaRtR/UADZqfd5VL+WOyQLxcAAABEAZ4eakf/A7GSqIHEzYACIDzwl1Yjh28vmeOFeARk4VqxohXRoDqYt5a6wt28Uk1R8Zp3TSD6WguSEOgGkKCrrt9Ut+AAAABoQZoDSahBaJlMCFf//jhAB8SHeuBMdumgANbJh7JYyDXhv22r/EoH9ad0pIGnQM6AUnn74UdrSoNJBmlxydASchv7JeXOW9RT50qqifanBQMmjN87tRF4k9LfuAsIoy8JAAV/eqRAP2EAAABZQZ4hRREsI/8BHimzwcnwyzmHeg6yqsjUTdgA/UzehFpNszYTd0kBXelyT4s3l9RQ1CRUte0FPUvyFi6LwGWEXg9q9q0hFLm/wJ3XOT//tEP7yVXl84OyIcAAAAA3AZ5AdEf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RRCqjR35y/wf2FXDyeiUFatFvwKRN0XsJ6KwQAAADcBnkJqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RJp3jhs++Z6tPrkrrvAAAAZUGaRUmoQWyZTBRMK//+OEANbO2YvntCZxh5hg08UaxACD9DOljRp5V+s7180K78azup5EF1kCB6Gb4AUTpkDB0itHGSlYMYuoX7t0mXrnSHXpoVFq8NRoegk19NX9aJqfBpv7KwAAAAOwGeZGpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpEmnhGpuwrJAUIrlspJGtZ+AAAAAW0GaZ0nhClJlMFLCv/44QA1s7Zi+e0JnLWrF0ADm+eVQ7SYalP8jrb9BUBHFU2rkezumoEaP/aduE7ABG4s2SsTdl9P0zsVrtoBCgfybKdS/iYRr1Gqd6zf1dlcAAAA5AZ6Gakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekWb0s0V5eABSuWykkaOGAAAAAX0GaiUnhDomUwUTCv/44QA1s7Zi+e0Jn9k+7AvjvAAlMA0ZZtXy2Itu/Mq+2wVbtGEqSoL8BPQeFKT2etiRjOb9eB91k6b0L+jni2OxH5O1y0DS5zsOjn68bBVEJU2s9AAAANQGeqGpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpEmnrewj5GFK5ktQAAAAb0Gaq0nhDyZTBTwr//44QA1s7Zi+e0JnxVw/IoAOBVHY7s3PvuidlXx3yzA8PR/mhBkcJYtPbs003scTceJGVtma8rQmLPjDtW1jkBCAzQOh5rZhraa0OY/2GJ8iqE7ocsBDfi8D17R/WJk9R5gsgQAAADwBnspqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RZP3TUHbCcM6xKDDKv9XiuIoEAAABmQZrNSeEPJlMFPCv//jhADWztmL57QmfN+Zk6MAEtWoibkfFaJeQYDGLt/mwFSrYJiMLvfQ84nBaFAlYwbEltJB3gJZ6oUC5y/VwaN/NgwyvcNL1YH3zFefRPzwYhsXJp3CkU4CyBAAAAQAGe7GpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpFk/dNQdqg2igwo4IwT3AfjUZZg/YwUAAABuQZrvSeEPJlMFPCv//jhADWztmL57QmfuIoWcfAWAB2a43YaaQhjAW72C59FkUXS2pL9DuHDIvn3cum0bqgm7v7J/G6rHkjafd6jVCnu8cksxx5biFehCFOtUG6dNaP5CKBzAr9yjs77e7PhuzZAAAAA+AZ8Oakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekajm0O9PuQVk5EXrkUyrPt/kdbGAAAABqQZsRSeEPJlMFPC///oywA3lVN+tjqoVJyYG3OgN9kAC+YkLItZv6RKtppNk7omtj+PXUnCyTQ8e5serMT6JKGB+Z3INw+RcHdBDz2XXMdt5gz7RyDNnbtNMQiydTtsLNIYWK0egy1zwWQQAAADgBnzBqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RZP4hE3XhVy81UDxeIQAAAAFJBmzVJ4Q8mUwIV//44QAfz2Gm+hYQAcbYXSEMN3B+l5koW7v5eeJbLJ9nv+NZTLT7ROgq52QiqRc/Nc/AbsbiQYYoGl5w1TH7nhLFme0s6l784AAAAI0GfU0URPCP/AR4ps8HJ8NX/c83xgOLORlAoATSfjGdSmE+BAAAANQGfcnRH/wLpMcABsT9LfTvukqa4d8oyKovzeNEUQqo0d+cv8H9hVw8nouhbAzxIOwUrmStBAAAAWQGfdGpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpFRte6+1rB1azcyMd6HmklikjiA93ejD70kIlUkk2mEKxhh4P0CQbl5nO6+cYo/hAAAAOkGbd0moQWiZTBTwv/6MsAN5VTfrY6qFS/KxP+HoZvBUAJkw62PkY5VG5atwUvhoox6A1gEXBilns2QAAAA9AZ+Wakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekVNHnEUgHd6I19lGoJguNI6cykAAAAHBBm5tJ4QpSZTAhf/6MsAIQCqT2iQAGxilQtixn5kiSuB8e1rwk3KvWwB8NGj+6TwPOYFlDk5eHeWnkvMzOzc/tFIJycth+RXTgfxbYq1dYbHyRujCQer9/GgWQy3JuFgsm9zq2YydcqbzFpn+n/mB5AAAAUkGfuUU0TCP/AR4ps8HJ8NOEY8cFbtQAgNvGHJIyBxTt+xLPQSLRTEVwt40uAYhZOUMVzvgiYYQvEW8VZoHkk+6ZP+Ui62dNBogf5py/agXW+P8AAAAwAZ/YdEf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RRCqjR35y/wf2FXDyei6HssRduYAAAAQAGf2mpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpFlBxQ1Ff98Wvar18GV1BAQr5N67z9kAAABoQZvfSahBaJlMCFf//jhAB/d/6PuLof8dkABqto4jpv8CJCDPcjllo4Sbua85H2RqMFmxXVm4gXp/ocdBNorjSQ9SDGFiypeXAXh9piy7mE8GoV8GEbhQXZmoPqZcWNrK6TF3oll17EAAAABEQZ/9RREsI/8BHimzwcnw1fSnETirkoAPyX1uuLIq6IfIzwYYEEOCkQCXz/I+WN5yZ4Wh5fybxrNqsZDw1zgtxxRRkcEAAABCAZ4cdEf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RRCqjR35y/wf2FXDyei07ppsORsy7VkIA63T9nKnL6YnX9PCyEpAAAAOAGeHmpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpFokEDxUFH78R8FxpGOwAAAAYkGaAUmoQWyZTBRMK//+OEANbO2YvntCZycRLe0AD73u0VGDRPwKu7RRSLw9CvQZBXeT4CnyFdrcgT1kGmr1/ab6mqjm1S+w9vhuY7/0W9+MrFQ+EnKyQ+UJBLXvkvj5VtPfAAAANgGeIGpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpEmp/dwF2URhcaRlUAAAAG1BmiNJ4QpSZTBSwv/+jLADeVU362OqhUHWnzEjzWnAA60VBtUWmHlGRmB+5ZsmUExkmANgA/+HfJkF2pwwuc2Omon/qfeGnIUIsQ2d+ORUw67zvrmkv661iNVdCGOE3wYMJvFhgsONQhAH5snvAAAAOQGeQmpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpEmpyOiToAC40eZOFonqgQAAAGtBmkdJ4Q6JlMCFf/44QAe/F2/PQgAnJIoIjYJpKBMv3Z15oMbVE6R2qMp6HdPs0hmbUH00lWIIoHm87yV3Y2WWAoQDZxULD7HQXpjIss4auRaiJrtORRMa5FfDca2mLX0/DVwjRFS53uL3IAAAAExBnmVFFTwj/wEeKbPByfDJheIbYewAwAg81FNFHTTZ9Y7OR3jMXt30POTLuxp3gUX/31naLrbp4NhszXGRsNb/JSt4yqFVLiDNcypQAAAAPQGehHRH/wLpMcABsT9LfTvukqa4d8oyKovzeNEUQqo0d+cv8H9hVw8nolB+BdL0YrY7asgtXO7eOjaUA98AAAA6AZ6Gakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekSanDmnTP1MvvtYff997YYAAAAG5BmolJqEFomUwU8K/+OEANbO2YvntCZ0YTUpxRKgAhBxuJtR6t/dcg/L1YoTr9nZJj7+sK+SiKZmf93P7A+/YoSePZKZL7KSKKzSkFpWvLH0Rd9fyNHdY/7xOXehDSBjRumSq/9/n0c05mpJ5+IQAAADsBnqhqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RJqa99LDjiqx4/ID6N2KHMQAAAAGJBmqtJ4QpSZTBSwv/+jLADeVU362OqhT62p1aPAAvrq7Jpv1oPq/v4J7epmVv0qps6O+Kl8SekLqK2BGusNyDakEeQmAppxPhnV/Y3ZYEBaY6omVQJin1G0trQ3Qv52nqzgQAAADwBnspqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RJqcUOm1VTTln7VNi/FagAYK0AAABgQZrPSeEOiZTAhX/+OEAHy3/mjpUs3EELdLZwAQjKirv9Dxw/ViDhaz3TwpXsEka05bXfBXAhi8oGUPXsB4CA96uDuBlIF8+oG6DTKXyI00izPipEs2zZ/VIVe5jlHojJAAAAUUGe7UUVPCP/AR4ps8HJ8M48njb50y313AAIFKAg7/MtDQn565AqPCeQLux6stCRYoZRR3jq6AA1RlvwmihX9Ig9ur6QO0/dKGiYVzadg8zVcQAAAD4Bnwx0R/8C6THAAbE/S3077pKmuHfKMiqL83jRFEKqNHfnL/B/YVcPJ6I8GBlG8zNkEW05+zpxtk2fPuFKxAAAADkBnw5qR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RHF+qh+I7uhoUwyFxpG7YAAABuQZsRSahBaJlMFPC//oywA3lVN+tjqoU13x+HYrUtOABz/KEyNm96479B/weipa/G7BL/5as/rCDB93S5NeLQUdovW0oUhVuUR4g7fdUhWS+YRSeJUEhphLihZygvIeF916itAXuQ5rbNDpAWB4EAAAA7AZ8wakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekOwpckYhwB/hjgMFieWskq7AAAABaQZs1SeEKUmUwIV/+OEAHn1VxrYlSAA60AlZ0gBvbazQ5Awj72sebjNLNk690FTTZMelOKf3ITUjIZmRMwKFywYBtvO642iDpeePyqvpe8I+0XLWPaAHXm9DoAAAAUUGfU0U0TCP/AR4ps8HJ8MxB9VMrxv/wAg4sUODHs04C9TtgZTLJXDEObZJfV3XFM8MJI2rVJwSo6P4AeMdl3jo9Lbrl+AabQaFnTn/7Hjs29wAAAEABn3J0R/8C6THAAbE/S3077pKmuHfKMiqL83jRFEKqNHfnL/B/YVcPJ6JTQqqvOoNMjuh6/tT14OnH3quUDpN5AAAAOAGfdGpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpEtNJ6cKO5Jzq4WNJH1RAAAAekGbd0moQWiZTBTwv/6MsAN5VTfrY6qFNeZFhvAAuYEBws74nbWNdvFrHAfK7TgYiDm83dX620Ej//139FJgDx9JzT6tEW2YFW2ycBeNL7xML1vkNWsSqQUsb5FCYMqsL+kX6sPH8bq94jDsYAsAKR+uCX6SQaA3+1bwAAAAOwGflmpH/wLpMcABsT9LfTvukqa4d8oyKovzeNET7Ow0d+cv8H9hJQlXpDeP1axIAgVtAQ5SMFxpHhT5AAAAbkGbm0nhClJlMCFf/jhAB59VcCLQgBMuqOI9XipnOdwq17dvIm9JCbcgm/XYJu0dVb8JWES7qMI+/N6FRf00Y88cpE9KsXH/pKE9jhyLGWN0hKJ9XkW8KN8d0bos/DnC03SiYE54M411/EdofJ/xAAAAVkGfuUU0TCP/AR4ps8HJ8MxB9VliwJDl/ACBQH2hzJQoOK7fsSz33ByjHmSAVplw264wWTiEK2m3z5X4/Q2lZrtt1AHqxouYutWTgZRFWctMqMiI0+0WAAAAMQGf2HRH/wLpMcABsT9LfTvukqa4d8oyKovzeNEUQqo0d+cv8H9hVw8nolNCgL4DkWAAAABAAZ/aakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekSJ4HONXsnBphf7V5BJaBEa6ylTzmgQAAAGhBm99JqEFomUwIV//+OEAHn3/o+4uh/x2QAGq2jiOm/wIkIM9yOWWjhJu5rzkfZGowWbFdWbiBen+hx0E2iuNJD1IMYWLKl5cBeH2mjZt4jQJMxPkTiWqkYhRW8Beu7q4UKzOu8JdfDAAAAEJBn/1FESwj/wEeKbPByfDNMuU+Lr86MAGh/63XFkVdEPkZ4MMCckoAlx2JIbz1zecoHu2eiMiRenxeU5FMx6PR+q0AAABBAZ4cdEf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RRCqjR35y/wf2FXDyeiU0J8mvboF4sLjSQtjsANUG99eTmkTIEAAAA5AZ4eakf/AukxwAGxP0t9O+6Sprh3yjIqi/N40RPs7DR35y/wf2ElCVekSKINmfF5m2O4zIBY0jEoAAAAXUGaAUmoQWyZTBRMJ//98QAgxqMiJSFjFi6uY0fMYALVm/WSJ1M0vILyiB9RNDQR6fv4DWsYT+1/vP3LaJ9Ld5gkllObEGYC4HXF67svXxlVTWweNIemnGediHLVQQAAADgBniBqR/8C6THAAbE/S3077pKmuHfKMiqL83jRE+zsNHfnL/B/YSUJV6RKL3fJx8sYSDa4dv/g5AAAAC5BmiJJ4QpSZTAhP/3xABJOevOPDzoliADA6GaIsnkMkVviLxcsNd5t1PkPfYPBAAAAbEGaQ0nhDomUwIV//jhADW2Y2EIcVs8783cZPeoM4AIb1Q9C9ph5RaB2EhGvYZ7Hf8gDM9vc0nJtlr8yjPME+g4GbgT7w04/pmSVu7XpkofuVn/9UyAw2dZbkQ+tCySzvYRBUvFHEKf87ZWFWQAAADZBmmRJ4Q8mUwIV//44QAdnSlnjhqACGleRZ9fupAlW/2iVXV/vSWrQU6Mp2bbYSLaxQX5TgDAAAABgQZqISeEPJlMCE//98QASSYeyKmpNaACdvLfquVxc70IUbg60xXRuly9gwNCBulUeVDuqK9axjRsyZJu5a6QLz/PivYurLySf+IEah/S4iwJUN5jfuzVGVeax3dA7ZueQAAAAKUGepkURPCP/AR4KOc+RS0CZpFZ6Jjl/Dvx+NQAlKFvCnJ/zNJnZc5JfAAAAEwGexXRH/wHEh9YVOFMSXo9BdNwAAAATAZ7Hakf/AcTJRlRvN8xTRB+G4QAAABxBmslJqEFomUwIV//+OEANbO2YvntCZiHbJMLAAAAAZEGa60nhClJlMFESwn/98QAgxqMiJSFjFi6uNLiLxgAnFpcTGAM97D8DmKeYxs505YIflzTzLivJja41K5Ktr+5Z0Ws3b4GPk5r/bAJxAeErEwD077HIipsVDZRiwJbhiya3aqEAAAAhAZ8Kakf/AcV+lNKyDBaU/J855MADWpoVi4Tb6kOiFzHpAAAALkGbDEnhDomUwIV//jhAB2dFeeOGoALiv5bp0vQk80Q+LGN6EjCadIE+201fwBkAAABuQZstSeEPJlMCFf/+OEANbZjYQhxWzzvzdz8oAs1gA1WlnGfy6nIHGXIxuk/G4QKZbg1BT7RGCnsUdK+sI2xXLr/g1rU9LKlgQfBpD3Um/epD9jXjgjfKpvmJ5TaMgk68elWuXJ09WzH1PfnPbVUAAAAxQZtOSeEPJlMCFf/+OEAHZ0V55EBAAsEiJun/tt3vL3cG5Sbz093ndSADqWqnux7b4AAAAHBBm3JJ4Q8mUwIV//44QAeTFEhYWADg1qHfsGwxhk2C5abNIY4+o2b/gQWuebDPu4ulruNYw4OifOgSbSCTxQXVEU7kyn91OB1QXgP4XdGBZ1C9GCagI5QXngft4PCs171DqR/RPrdQ2ZagjMZmTokYAAAARkGfkEURPCP/AR4KOc+RS0CZoDv4j8OVcnACECdETxzVaEw5CFGpqbIEJY3e6qc+k7/dlPnaKr0zVkWCaXyGQgnn0ZvPmi0AAAAeAZ+vdEf/AcSH1hU4UwdzKBPDnzwdKbAAh8rCYGrEAAAAKwGfsWpH/wHEyUZUbzeuFFAfTJLpQ4AA+qh3qa2vGX/rHl3K9pEka8ADNz4AAABsQZu1SahBaJlMCE///fEAEuhK1xTFfACSo+KU/BOOrNP+RTKvtv950Zen6jl3Y13RlEBprYIBFvp3pLv3BVS69mKbi37aMoOqddIbjlSfO1fK8XGH+wDYAYZqqiXPv3aifEKv6UELR/si9YjBAAAAUUGf00URLH8Bxe7duqYhTUDCliUYMpAAuK0sh8nvIjWyWW5zKfclI1buaYqJTfINMsLJpLZ3xgC/he/QmW4hbbq+QYn1q5aunwxcjF9oZROZ8QAAABgBn/RqR/8BxX6U0rIOYInNx2bJwaR998EAAABmQZv3SahBbJlMFEwn//3xACDGoyIlIWMa8n80AAK6Mzh14NiUfMo99px7pagvo22zEQLNIRh4/spMBI7s/BFRNd/YNKJkOEQouaRLAJdH0RtQRj3aZcybLv7+8Qv4zaD9Av6hrQbgAAAAJAGeFmpH/wHFfpTSsg6GowtZJ4XMG34AIfKs0EiT9rlQghuZ8AAAACZBmhhJ4QpSZTAhP/3xABLObP/Zf0mccgBaranZzK1ORvEQzcfuLQAAAFhBmjlJ4Q6JlMCE//3xACDI6/nNjhUJ8PGUmNfRQABNZNxxeGDPc4XxB1TPzxaGGz/H7Njoyhi/vY8tmA2eaHRank6LSXw2bHw27O+MjxZswc3lfgLo5rI7AAAKEWWIhAAz//727L4FNhTIUJcQnHwSn5TAo34J7mE39xRxA/Bf2oYtOK2AFcfy9uVi2wQakQW/VcjTb+J4IODGmJAsijkhTcD1K4D2yffzM1ZFyyshfZFvEvnP1qfik/0dG3GdwDfU3YmnZmaBzy/lmGHHWR2yHS/WNE1E9Y/EUu3xVdGDy0VzlkPEOrxskewwqz2zBf9l1aeUXyal+MsCAXWNEYj+e0HJ+8Y0yuBYUJTncv+rw17OR0hKS6A6grpqwkXvOu6eksr5zEgY88NXof+fb+YSrQpB3CiceQaEmqnJVMd/iPsW8nLAC/25rB0fcY+dEZPbS19SMZm1KakcCQbc+hpeoX25pDCgqiClFy0UzOesylBmL0ySRlyXMNThBWiu+0LO1sOv4fi3kLUpc8kbaEYxUqPkSVoBtIWg6WUrhRPqMfTF6ZJIy5KwX2CDdAWsGUAtQO9we0CRbCXchfozdEnT/65ZPMjjthFUJ40NQ2f/Mmq+bBD3DebCMPZv/efiCnoB8RuLauiJ23y9jJ9kvZd/25zzu9pYEDS/+xfIiUKZD6BrwVuwTRf+8dyhOpS+J/ZpbKchyKkKTUSZ+QxKP16aPMepxn4z2npWuKya3epMhHvjzq7tAte3xHebgMvdPKoHZs52MrTHfcRWoX2491LKN6DBZzWbIrPTFgj6TWtzrniD2hozTmzT4x9+my4z3bMsbZLtlopdG3Kp/fVwgpuL4CJGbJxPGC77gk2yf/OZvzc/rkGxMo3sSFIlesgmwqGqSiaf8nCC7fr4gLVw+5Uq2RMQab3RHitjC+hN8z3khXGuP95jmRVtCJL/j0IfvQT5jouX27tN2tIa1wqO+Trk043Q2eWyJu2RytHyXZgUGq0qIP85bk+FcBpP+GjVF/w/w/lkxXh8jntGLIbVKcU5VP+WZ0EDE5+g1FCVSt3fQdcQJqUAvdFVMi/QdZBrhOR56ygrmx+SQ5V1P44MlQyVKMdaqubGHZ2BdI2RvlCaTwu0CTtcJnVV9rreOXUFuNcbuWAr7PJc7l7lpzTQCYF/nDJsxBCc9gP1l3AfmMa6TBqn1bMiOrKDudq17ixW6SpoHShjBmgedyM4xoWHrT/5FX21Bx8ew+q4X79XxjSB0+IlX0jncQlpRM6pYhJhSNE/YpYzyvhv7JqaIke1H+djgQFDXXAsyEqtPKwPf3/rrFbvuukhLF7ekFDFNPpovvt8rkx5bmUOwiLX8ampAnU0mRVs+R8DznUTbvs0c3cuQ9AKClrH3WLcRlofJwbyVlXh7h4SPI/QgSXxi7KnS+Lqkw7MTwTUHDAdp70zzz5aiiZGE46h7Tzke0+yKiXwBqS67eNPsuHl0mTStnKTt654wNuaAmYpci4pqBXU1NXG1v9a7vuogNhvPn41ofBuTJC5t/j7u7GUCxxvMkS2OB5tPvw+o7i3yRnXoiRWeJU4nptgwy+x3hmSdR9kcSBbYg56guaNU5zIgXWZHm0bGNySA7icnJV8RgFqpcKonXoQGK/SN+Z7PTeSsGNE+SBHcDh96p0yI7mgnMCK3u7e4ruagjc3AxNKOUwPxVkanNTQIAh2B2oERYYl0TQV1vncRbmUwGFewHuLacL8Z3g4MaPbKIoEZcZmphk2AxlS6MLiVyZt5tSJnY5hRMn/uI4y88A9w5zKmQUgQEya5pAh2wZgLK1uBJP2NYKPm5lj7qf6fNStYXcCx3QdEbsrlprLKd5rcZJVaaYqG55Nkc2JEIAS+r1Yd1VTv/lMKXC/S6TdS8I/EQHulpr8BVyQ96BBcaazhSS7U+w+kOH2Lbunjxz39vWdxmiWlGuK4Kntg4uCKiVE1DwvAquAN3CQgdv5vNNH/GqGMRYaKv7i4U1FCcmYIdIhKQUgTWSt/477Gj2T7wwYOn5muh8wh8z03awgbOBy0Ynnoi1EO4U/Kn7c89nIJwrRaNNmrbDviGNnek/qthyl3pmYHzRBokfT+dZgy3/ExCkE7tLmn6k6g8F9jdyY3um7V6pD35o3qQC/mTHnArkSIku4+INWQ6K9ydm/RDaxolL3arGUo9mjiuTQgV66lMIHyI8ivkXy2SiP2jCR6eZxTApvvTIVZn9UKNySwFOfO2wYJT6SKp/2GDFOnlNtW93E/Ux8RcXumPjFm/kq143Rnp75X/JVsAL4rc1Fb9/KQAxYFXAlg31ydk3JVlSoVOd805X7xhMnad4z8BaTHITqJHLcd0rReujSgsH/s/iv7do1ag9FKlkEYNRJt/JHEq7CFrDixmoGcmog2PihXiBiXiXyY2PRi6pd8YkoeVmz3ddtaVKjhoeUxHqqYJqgL8ac6IUriaMKWqh9aDRfCulkIsZKjuKpmzvJoYjoBvco1e4nBXtQ15gNz0CoXk2iUfc07nyfWUXusnSKkIirVwmP5geIYkRGUXJoKqgwtGazW7ygV5p0mq/RIoPLqzBNHJDLt4dFhufFBsyEvfxAeyD5FkDp4wQyrHdpy7OGLoU+hWHuTBlBTm52IQ6M4/PWXzIweJGfnq+L5tPPXit7mwhigz2t8DBmHmfVnCuCKjfmWGB1Oo/QFsb1lpezO+Cf5K4TXBKSMtAERVm20HyUde4h99ABU1DlDZzBp/pjm6YTYoWgmRQKlG6eurDFiMEM2s55Erms3lsRGUwbkwNarFsGbVB7FJ8m++dwid+k1N9IN8YKDHM9k9AF1U04vsjDYCWXRRQ9AQgTnM/963kyY17CNJL6bEpugTgV7nq01bbdnGTfwejgOdusIEfo2Jo4TUZXntbaq3RxgiWWTmXLM/BTM/gIBkpg8C9q2jJg6DSdDr+gl9Zdw81b25uoHv9OvIY6VHNMdl3IRXI7GuaaTrOoY31QUSOa1DEsgKHV8iQFoAqAvhYXJpo3fU+Z1rb9UKJi76d4m/mhKo2zgsFl8waaTgtJg0MzqvjkRJyYEZe4ULlH3oXB5Nw/5e1rlxYyEwJmCWFg3/DgJ7PZGZzvfhBPLFg+CLxXqj7/GaV4qNKRATDYP040R6fQnt90Jvw4+pmEwz87nwqY0hYVEv14tO+Wgv6bF9JmI6qzHkheEm6dDqe4gI/BvCltfvUKEvq66HIYCzr+7KNMpkjj5ybfJCYCHFezPFnj4mZUlfymJDHT/Q1FjEnjTE0h/Yjb+B/dxsiIhUwk2dpHU/NiiXGEQH/I0bidxJPdQy8XZpf1moGUStuYRsSVoG+Iqr2MWsaW9E8ifVxhYnM1TPV0L1QeJfU9CPI8g7uPFvpFhEmZFamDI0syANeMlyJLllpiOlBHRsBGU6NJDe8EucMZNBFe9EYTlxy6Q1rMYJEsV2Q9afIgmw001qy2vQA00GR+DTCzAg2fMTC2la1a0y1KUIFjLXiKVAywBIOxWIKmNmMtyyBQk9Fic59afajS31EqKCQaLTGPLq1pPh1eZZHjWwAAAIRBmiFsQn/928EYAWklE0PJl47yxYVdoE/JYx/urZu5iyUDq9xYn2xVd5wn/enzK+gfWHbJV79NFyhdvwqTAL6aEOMl2bIylpGkKT9ckFcBFU/gGpMovBRYamITnLl3JAqTLd2WF9lI4mmKcyI76dJQamMXIJE0k5HbkfSwGXce1G5kvN8AAAA0QZpCPCGTKYQn//3xAEJ89d25F0foIHkgVAHgBcKHxEErgpiQ7vik9gx5zRwV69PmaS/vjAAAAGhBmmNJ4Q8mUwIT//3xACDDvjdm1IJ6MY0R/9FiAAEzqxtBTM4peNS/zu6eNBolD4lzwmHLjXML66XaclpQLfkWk/92XtPEPp7+pZAsOi3eDdqVOwIn+21euWNEJw+lihEAOfwNvRH5+wAAADhBmoRJ4Q8mUwIV//44QAeTRXnjhqAC1B9oUy4NSWRhSYcV5DD/GExoYCU+v5VN3GGIxSTzZaf0OwAAAGlBmqVJ4Q8mUwIV//44QA1tmNhCHFbPQzYehubjAAPXzCYxkoJNwdyisrpOhO9FvRa4ZPnusZsqlc+Sr7RGcQTI6LA/vcR+f/yZpVE7wR4kM8yEz7OL6qSvA6/ZikTEkmW5NP02WdaJa8wAAAB/QZrHSeEPJlMFETwr//44QA1s7Zi+e0JnGAIkGrAUAIqyaLIDwy3fEGhMsBVcEeEgHzYIvgrOSl1+sZfusx1MUROs7cH+P5ZWtQ7Y/qqmfrh+EUg62hBiHHN0mZ7OGMhh/P6SzmRCHCX/v6WeLLhB69ZJsD1WA6G8NedqETbVgQAAACIBnuZqR/8BxX6U0rIOeLTc3/IG2AgATogrvKpS74igxeLAAAAAY0Ga60nhDyZTAhP//fEAE2hIoFd2vACV7IF7fvYcEY3LbzHSjsshGNnMZP64SLsBtQKPtpRiQwLsxj6dgQsLRUFN7fmVyFQ1S42ZrNTyGogfBw1jZhgAuZpbQlq6BWFRr4lYZQAAAE9BnwlFETwj/wEeKbPByfDMww1T7r/MABOHK8Xieo7pWmKuluLDQ6BkrwG9mEqKuc+aiZ1Ohu9jhLr/akxPiy93yO57bi1BsV2W18I1n5VxAAAAHwGfKHRH/wHFr4pDCqcRMJd7dQANgWcGbPL6YebkzkYAAAAlAZ8qakf/AcV+lNKyDni03N/yBtmkACb2TV1QmdggwrGS1GeVcAAAADlBmyxJqEFomUwIT//98QATTmxHqoDBTiYQAXP8mzudBSyEhYDro7EAHEp/Suqyn3nwZ+Fp/h/rDIEAAABhQZtNSeEKUmUwIT/98QAgyOv5zY4VCg0ArmgkYpJACpBo1Omuv5xfEEN//6mqnxI5Csvs39NldI3JgINVrV8S+LKmoieWaKh84R4hyr70nyhYjDDXvxn/GENgA8lb8pdHOAAAACRBm25J4Q6JlMCE//3xABNObP/Zf0mccgBMesi8stPtUzNx+4MAAABdQZuPSeEPJlMCFf/+OEANbZjYQhxWz0KylClBQpABDeR1umQO/p5Ww5Jn/R+1nyhppYnZNvE+T/dWmIrYZkS0d/9hmnnOL69w7qraEOzaEXzVWs/byX3Nl1/6A5LwAAAAakGbsUnhDyZTBRE8J//98QAgxqNEAAQLASN31PiYyDqbjS4i3nl/XkYAz3sPwOYp5jGznTlgh+XNPMuK8mNrjUrkq2v7lnRaw+g0QlUUIO5Ij5k4D8anK8IXTzzWfzEt6Yjt35j6iAjn2o0AAAAjAZ/Qakf/AcV+lNKxSpox8sAirXOOAEHMYLvNDYVNYtZ6SX8AAAAuQZvSSeEPJlMCFf/+OEAHv0V544agAnGna0tFDR16NlqbeXegKKXoiezqtXyBgQAAAG5Bm/NJ4Q8mUwIV//44QA1tmpubNuC/96ehmbuflAFmsAGq0s4z+XU5A4y5GN0n43CBTLcGoKfaIwU9ijpX1hG2K5df8GtanpZUsCD4NIe6k371Ifsa8Z2oFwR7DAM1KSEEl4Jom3HSs1lrfD2rKwAAAClBmhRJ4Q8mUwIX//6MsAIAFocE8ZJM8kqlgATS/5qWbn2GQdR+blXjgAAAAG5BmjhJ4Q8mUwIV//44QAfrFEhYWADg1qHfsGwxhk2C5wkvmYbN/wIKpvNhn3WgX13GsYcHQUTB0QfB11mtF0IrsBid9Lg6oLwFlE/fAs6hejBNQAWR/+L/yBAHCKwm7UimFAxl4zC4GyJ5xgh7EAAAAERBnlZFETwj/wEeCjnPkUtB/7MJ/FGUIAEIE6Injmq0JhyEKNTU2RZyKVknsjUbvT0rdqiX1/uZgv5uZLVkcf2Qq9d70QAAAB0BnnV0R/8BxIfWFThYwe0Ed5y+AHywAEPlYTA15gAAACgBnndqR/8BxMlGVG9YwejZBdJQEACbf7kNra8Zf+pI0P+TNp52Qqm9AAAAbkGae0moQWiZTAhX//44QAf0nIEaOdiAD4pKHcUBYvBePmI8j7ebS25B2SR1edOXlrL1F4dsQmj/YwsXJyyWfq+StVE3Ial3T7/gP9tLoRn5c9AOaOM1bS/ybgQ5BnNP/Dl5i1R63tjFoaqXPyelAAAAUUGemUURLH8Bxe7duqYhXhAc3tjnYALitLIfJ7yI1sllucyn3JSPrIPBeP3MtHDW0TFE164fbM40RTlOG+SJElAcc/jzWjxA/FwJYrjjbrhj/QAAABgBnrpqR/8BxX6U0rIRv0KKek2yCv+tv4EAAABkQZq9SahBbJlMFEwr//44QA1s7Zi+e0Jn9k/jfABKbE6aD2BAWVkFjEY7eletkYs5g/NsCCh4/spMBI7s/BFRNd/YNKJkOEQpZYl957O6rW3iNglXQjbPo+b3oJj2WhVGn23FkAAAACMBntxqR/8BxX6U0rIPfWXcYdv5KAgAQ+VZoJElIXKhA5OwOAAAACZBmt5J4QpSZTAhX/44QAfrRXlaVEJeUIAWq5hoRlEKVGxfEGo72QAAAF5Bmv9J4Q6JlMCF//6MsAN5ehQmRIQqFScimmbD+qwAcYe6IU1VydS3Dd6psbQvcHplbsNHuRcmol9OfQsdHrV5AgQuGLkpXa5alSYzWtr7kycYAudP/QaCUuszAHM6AAAAK0GbA0nhDyZTAhX//jhAB+zPeigr9IsbL4ABFM5sBkWAqdDwb+FEsi3K10AAAAAiQZ8hRRE8I/8BHimzwcnw0jwSPJSpE25L3cAGz5RN2llCwQAAAEYBn0B0R/8Bxa+KQwquY7Dz6V7ABylTqQJ6TnlV1+L7ZepjnGT8BNHeHsc0pRGrfHzPD+J2Mu6HF7+73XjWVRcznP0pZVDgAAAAHQGfQmpH/wHFfpTSsg/x80A5PsI1AA2etAWdH2uBAAAAeUGbR0moQWiZTAhP//3xABPXcIn5AAJ28rjDIjOC6vJ5s1eeSVO065jwByLfdqSQRXg4mhYdsrp7V0GAPwEjiCN9T2PT8pHMQB3JlIQOuCLjS1XnOpTH/SFLy3f9yudUCsaTWqjF15hN9PRz+isHeDcgDpXiKbl7zekAAABWQZ9lRREsI/8BHimzwcnw00jKzf1lO4ATUdLQsmE8r0qPiX8+32hQfkc5B1ITsAuOrIoTSN2IpTxAe78IEE4nYktv3ti3RYM/UlqjJ+Nu7eIU78gtgcAAAAAjAZ+EdEf/AcWvikMKsMRlk5pAUmACEysJgc8ruzX8UcWR3vUAAAAWAZ+Gakf/AcV+lNKyD/Hy4ttyDtRX6AAAADlBm4hJqEFsmUwIT//98QAT2Ch4Cn5yHEwgCgE791VIm+9ZNw2n5bD6YWe4V8cK7ODPd7F17iVG6D0AAABzQZupSeEKUmUwIT/98QAgyOv5zY4VCjcseWg7tJ0evx8ABOW17CmfHDwi09cJv+j+XaBbQnLEYF1cSP1DaRCtbD0eKcUXTxUp68LJnwL6WC5PSVJHOGKuQbfQBz7IG2Z2u4E0azdDFazil+olwAlojgM2QQAAADZBm8pJ4Q6JlMCE//3xABP+T7BQWTr908QYCg/HiJQYldiK6GVq27L+90DxPc0XvTikPu1NNnAAAABZQZvrSeEPJlMCE//98QAgyOv5zY4VCg0OktwZi7/LACWinoHe71i/mXrzLD++kYN8PN5V+OwxJBPQ49oXA1KjXgrILRi178rYUlVzxuLvLbLjFVTlKdFZllYAAAAmQZoMSeEPJlMCFf/+OEAHv0pTgDvVbOcqrSACH5EPbULXmxBxKxMAAABlQZovSeEPJlMCE//98QATbiDjSZbqQASpIhCYcDGgMI9BsrlOzxmM0CMBXMDyEXGckNvE8RTBWcQblFAuSA7Nf13MbtmHSO71UR+Qu1p85gZakUNi/nII1sy+S+ARaw2/+BPtFcsAAABPQZ5NRRE8fwHFuJOV5ApXO/SIhyEYwcEAEtBBa6rAOB+vqII3hps9eSKoEjlmJlzOpzPU47ra51F07KoIBOHtikg5rGo1cLmVrib77aZ43QAAACIBnm5qR/8BxX6U0rIQDA/wFHMqI5AAEHLDr4Tyvf0iUbAwAAAAMkGacEmoQWiZTAhP//3xABNOeu8+6Kvf0ALW56HyCMx8yIvYPKXtE2VQoz7k1szG9gOBAAAAaEGakUnhClJlMCE//fEAIMjr+c2OFQoZmrjTuUryABONOwzbhNHJp1CvXTjqM+w1Y8fIKj9DTzTMYEb02Fk10xbsVlbLj2a/5gPjvTeGvy6RLFrAc0gmo0dnFQBuijqpHD+88mDb9pLxAAAAPUGasknhDomUwIV//jhAB79KU4Bucr1PABwdUdjMhDhs4atUYrewngCLUWkSxXs0W5AbAdY1r5Jdzv8t2bcAAABmQZrTSeEPJlMCFf/+OEANbZjYQhxWz0GfwDVp8QAO8fC1pJNs0FX4HxnMQp9W8pHE41hUdF3DOorNCo1HizvzKHOwexw7cjINdhmcl97UNarJ+dRHNXGwtVbCpSi64K4b9xqAdtWBAAAAeUGa9UnhDyZTBRE8K//+OEANbO2YvntCZ0YTUpur6UAIFmnau95FXPf3BpIkE6LwDSPyi5D8mVs75RmH/5QiKA6G479dTmZvUowWj/Z3BhFTC0oKDek0faVl62TuzWLavz0/Xx4BgTtzurZhhVWcVLekeQYtatEPPxAAAAAjAZ8Uakf/AcV+lNKyDnjy4kvkKOtwAB+1v6qlCEQ96WMjs3gAAABrQZsZSeEPJlMCE//98QATUtkLN8ALW+N+CmOVcn9G2C9H7w/VQ25TBg73V2dBe7z8cTwjb+3N4fSYu8qHjIFxonyaue7/k2hwQ7CF0bw8gTs2prm/KNwoKVMwjOtAunTTUXwMVpPUh8H5vqEAAABMQZ83RRE8I/8BHimzwcnw0z/1OxqyR2sAE4csC2aaHsRVEispMFNNaF2mM2vEBNbwoqzGY553ovCGD0QEUWPC4PMwQLFQLjdFSDw35QAAACABn1Z0R/8Bxa+KQwqnFAEA9nZ9rABAnt6MMXZwZBD3fwAAACEBn1hqR/8BxX6U0rIOePLi4K6Q20AHwMUehyMNJXXIe4EAAAA0QZtaSahBaJlMCE///fEAE26JsFBZV/8QAUHCBLotu8ovtJ26Wpm79/deTDrU4kZ+FfKH1QAAAF1Bm3tJ4QpSZTAhP/3xACDI6/nNjhUJ+Z0RMu+gAC1AgDweJW/V/UTfxlrdhceVvZXTLbdB0LZSNS1/ittDd73qEtwN2EgoZVSp73Pj57JmeomdkxQHwjYI6SuIWakAAAAhQZucSeEOiZTAhP/98QASznsF0RCQAQ+ovr14a3fREHgsAAAAY0GbvUnhDyZTAhP//fEAIMjr+c2OFQn5W2cq2bEAD8VS8iJqTbzle2qrppEEQiZm0Dv8CxWeQmIHKAmgBFgv+KY9OJgzYBh5BOktcEtY7jiRW5Im0EXpvfKh7im5wLjZVV+YewAAACxBm95J4Q8mUwIV//44QAeTSlsqE2IAIfnXLO3GBgkRKBL2n2FgDSH3DrLCwQAAAFlBm/9J4Q8mUwIV//44QA1tmNhCHFbPP3N3Gi4i6wAbFNgxz4wF/G5YFzLB/lsCMquEmSW4OrqpD0Og8wpe0lJXeJSAV3t8946dGtchg1kUeB++CflUfs/P2AAAADZBmgBJ4Q8mUwIX//6MsAHy7lbcAFqb325MREqd2ZDAtoQq3n6HjfSE1lCKp9qsz5AaAIY62q8AAABlQZokSeEPJlMCFf/+OEAHn1VwdH9EUAEI0JWkvTG+JqeMs/VBfWpug47iAwwUjjdPLCHWvzDJYTEpAIiHDT2wYrc82zTgPY8XjaI+4UDo9wF/1yUuqioorcY5BUwssYFPcJt/Xw0AAABJQZ5CRRE8I/8BHgo5z5FLP50a9ZdQAlsXywNoavP31hTJOC9H8crk9KVf5hsV6A2l0WKPgQqhgf7Jii8jMOlZlWc2CBMepvAGXgAAAB4BnmF0R/8BxIfWFThPJ9/Uq0YdqpUADZ6uo/tBjiEAAAAgAZ5jakf/AcTJRlRvGLnqjzYucLer0EACHyrNBIHol4EAAABqQZpoSahBaJlMCE///fEAEtLYirMgAEQeW/WJi29q7aVSgzXsmGA68/vzUjskSArOv4/Vl0jECcR8LfxcEChXDG508dKj42vUg41upxriRPlG87ejJa0nR3SZy9LnpQlx/n9IN+zi+JlwIAAAAEtBnoZFESwj/wEeKbPByfDDjRrNqv+gGnAB+JcLFDbXUbTb+YGLwDdreUBtO1354Yqz4lNB79yV8WvgatUwvXN6YNvHKhMedZolL30AAAAjAZ6ldEf/AcSH1hU4TyfUe4KAgAQ21tWLXeZSQpHd+3bfWrwAAAAeAZ6nakf/AcTJRlRvHQH5He3UAD6if9cerXMwgaatAAAAcUGaqUmoQWyZTAhP//3xACDGoyIlIWMZwinL1Tk6tI9QligBM3ddhTsTMQtmKYm/yvpj7QfHYRrtIqkd2L3npczPcR54pnjEY4rYKv/NXTiwfAAqweua1YEE6hZSC9Vf7QhD15M4r89tYZUvQmvsBtuBAAAAKUGayknhClJlMCE//fEAEu6JsHtCretc1gQDDCWFUmLIAMXmj9SGCViMAAAAWUGa60nhDomUwIV//jhADW2Y2EIcVs87yIxR3NKQAQg8KyjOotvs2R1eXQ+M2WHR1syIcqfvzPl2XpabBKTZts/RhE/8ZDRSV/kuAggEhc8Y6lHXbdIlDyrAAAAAIUGbDEnhDyZTAhX//jhAB2dKWVs5ypNQAhN51fc9KjaoAwAAAGZBmy9J4Q8mUwIT//3xABJuIONJlupABKkiEJhwMaAwj0GyuU7PGYzQIwFcwPIRcZyQ28TxFMFZxBuUUC5IDs1/Xcxu2YdI7vVRQ+tyhscwMtQ+tBkzJNB3bJb7DJNiCJfS9/jYLvgAAABJQZ9NRRE8fwHFuJOV5ApKVjYO3oAJMYn/qrp0Rgt/T+5vhvFK9DDME8XxGSpAbqSSF2gKQAtc3ipMJMoHsNq5DeNo/39BJjP4dwAAACIBn25qR/8BxX6U0rINWp/wFKMqI5AAEFDGCIQ+7MjI5yagAAAAK0GbcEmoQWiZTAhX//44QAdnSlNqJwY2XlABD6+BeOe6wlDr2NSzuXLlbuEAAABpQZuRSeEKUmUwIV/+OEANbZjYQhxWzzuwwkNoAJx1R2Nqfcg6o/Rak9zXkVqNVSz2QRKQawM5ayrwx9GWuuO37WummNGS7VuJ+uBsjA9ZZ0NPWdyGHBvM0yiJh+vCRGSHVf3BxlLM/dyrAAAAFEGbtUnhDomUwIT//fEAElNfqtdLAAAAKUGf00URPCP/AR4ps8HJ8L8yZmttt/xD0ALbycJ/XQ/qcwrvd4VYulsRAAAAEAGf8nRH/wHFr4pDCpZIjEEAAAASAZ/0akf/AcV+lNKyDBaV8cugAAAAJ0Gb9kmoQWiZTAhP//3xABJObQXRG4AAmldo18id0S0OK6arhGTWSwAAAF5BmhdJ4QpSZTAhX/44QA1tmNhCHFbPO/N3Hrtd6wAbGAQM8mMzhHOoi2YfuXB3pv4JYW6KesnPl8hr1YBCvyK1aHXyBf94X/BwiHA2QjF5csfjsQzkVb4XK/WQhOj0AAAALUGaOEnhDomUwIV//jhAB2dFeyoTYgAugmKv1C50qqrQcHJAZdyZIHdTcr9MTAAAAHhBmlxJ4Q8mUwIT//3xABLN3hxNzo2xgAHKwUKNpAiRXfOYq0Jv0+5syE/gQCxrhSf///t1Y7t6teDSw41Q9omJIcVM8VNJZxqskQhLqtO4tuiKOfMYAm+Oxp/wt8oIhLDoE9whHE7pfofaXY4mBpGw/FF9wF57+GEAAABLQZ56RRE8I/8BHgo5z5FLFMgNBUXWBcT8AA/tY4kbbd9eyOSwXEjJkSLNzWCsDT6Lsy7gei3XNdQdBeD6Z5jtKIQuzOQS5dAC/LdBAAAAHAGemXRH/wHEh9YVOEro38aKqKWwANnq9hfCD0EAAAAfAZ6bakf/AcTJRlRsBY640i6Kq8P9fNgAQ+VBU2F4+gAAAH9Bmp1JqEFomUwIT//98QAgxqMiJSFjGXKs9mgBuvLfqX/crfTPHSCtIXyDKvNfq/sORmkBrqzEHY+gvXQv7QvsWhrNi+uJaWZLfMU9J36F7P1F3yXF8hNlM5vxtPo69xRaphSVIhUOITPRQR2/e9UZ8NOM95wrFa2FnASzsaWQAAAAPEGavknhClJlMCFf/jhACbfqebh2VUuU/Yd4FF+BNSYkWWv1LkG/j9fAJVCavmdh3sRWv14dvZtMuRFPUQAAAFJBmt9J4Q6JlMCFf/44QA1tmNhCHFbPP0sQ6Gc6UAIPrSnbXvlL1r3jlrKB0rYI6wWWQUYED9HEH0uVxjHiAaAwdVycvGB0qPJvDjydl5u87gpAAAAAWUGa40nhDyZTAhP//fEAEu6JzdwAq2ZBeq6XQibHf2/qTx/nif/aU35P5zaCPYqSuuilWOSx3IO/8irkjbuXUduZnBnfGZuk3PnmO/56vw5l5OC3lPLmcX3/AAAAUkGfAUURPCP/AR4ps8HJ8Me9furgA+BiYldOt74A9QAF5T1TfjLcKM+VEjqiuPV45E4Oox/PgghVyv3DnnOXysn3NyBN18KRe95KlrmGdp26Ir8AAAAjAZ8gdEf/AcWvikMKnpEcivDUwAQfMSClGv9qKderymjm7V4AAAAgAZ8iakf/AcV+lNKyDOSGsUY+xdPU6pUADZ6y6JVtEvEAAABiQZslSahBaJlMFPCf/fEAIMajIiUhYxrurjKGFGACccqqr9bY9GCeXYOxOjG1eqcSyGyCMwF0uWm2QAFpPbjArbsMpZGMcxk0sO8WMOUzd77Km4ntjkLhEKLjqVabEq1eTsEAAAAcAZ9Eakf/AcV+lNKyDUaQURE+YjUADZ6y6JZn+AAAADNBm0ZJ4QpSZTAhP/3xABLObO8+6Kvf0AJlp2GDYyvWa07ylye9odpJ0p1bNbby1CdF4N8AAABbQZtnSeEOiZTAhP/98QAgyOv5zY4VCfEPo4rFkGsAJlyUhD//aHhOH7CVqmwMVjTESY4NmnnFK7cj3/xqVOXCToXaeuBk+hGkvgNyOfpj6h80pbN/0bB0zBefsAAAAChBm4hJ4Q8mUwIT//3xABLObP/c3mhf/AC29f1oXuplzOyCbOUE1aixAAAAcUGbqUnhDyZTAhP//fEAIMjr+c2OFQn0M3G+gBNXj311LfQ/fc0Z8vtWer9jyj38k25/SBZs+cKB2xsUpGWang1l7qrCj/qqZ7fefSMKVJQwATD1E4Ze3qULn3BaIMjk3Kb7M8YywiIYJEvYTfhMwGB5AAAAO0GbyknhDyZTAhX//jhAB5NFeeOGoAQ7aOxuvtOYEa00vXpolY8XiZ51FbFn6gccdU+msTErfEPlM9tUAAAAY0Gb60nhDyZTAhX//jhADW2Y2EIcVs8/K3v8lKCiABD5DQTt2suVSxeq+oWgi28VVxiMdBNkpUrvbfEJYnCRt2yeddLWILDGEwKbz+hyultJzF/TxptIQ7tibDcIIeq04tlmoAAAAHBBmg1J4Q8mUwURPCv//jhADWzto4oAhqxqXvxKFpObM2xokzekqBQorgNBp1RCKR9ZyMzZwtW8RU4Nj/BZeo5dI/GvrMXFWFobAOaJymOZptfx1K9AfA1qBn3SGG2XmwVj9ZHRwL70XBHqLV75MfjzAAAAKAGeLGpH/wHFfpTSsg5IXEKE4GpgAmV6vNlDbuAkuBWp8eEOOnbMq4AAAAB6QZoxSeEPJlMCE//98QATTeY+nl4AVoXAGHHvQAdKVoxIrenqcMMgD9OEb1CkWpXKhsIF5XFL9PGU4a1wthO2PL9kjeOC+Xur3cGYi6XNOSVimIWNOBhWn2xSHmHW4jG4cmz3/HUcMtfGRzg4SrnQxQreQA7OhPvm+oEAAABPQZ5PRRE8I/8BHimzwcnhsP2BVrNqHWYACdpm/ej9Z+zxX8snhMerYD+zFky64kaNVJRSwsE3ylwqb1WrVtvH3TenTam8R+p3wokmmRXmQAAAACYBnm50R/8Bxa+KQv39Tm9q5Yia+HNmACcJJkDEEpBd80v/+VaPbQAAACkBnnBqR/8BxX6U0q+w6D5FUUToiQgBMZWN3MrIhnHKezXD9ehrXvzNgQAAAEFBmnJJqEFomUwIV//+OEAKL3PDSih35ml8ACEaErQzcTzIa1NjbwqJy2O4E7IyU050q5Z7z3YeM9nmr18ywfqSwQAAAGZBmpNJ4QpSZTAhX/44QA1tmNhCHFbPQZ/AMRs/IASIF/s6PNpnLqXJhmDkKBpMGsZybr0kAMkrwuXyFQVEsSnj8o5OGSr+rHWA2noP61UbfBx7bTSRu8+zMWQqVAniWRyRoLzHz8UAAAAlQZq0SeEOiZTAhf/+jLACABaHBPGbdiLgAKjVb73rRPRmR/VccAAAAGNBmthJ4Q8mUwIV//44QAfLVXR8CmkKADhxUNwfz+xkEAOJ4qbl0/HxupagjfUh9ghS8rPa4FXydOdzIDCI2r7jOsz6oosiAf9Adjosc/l59fWTKbi3i3Unsn/73xqLGoij2bYAAABaQZ72RRE8I/8BHgo5z5FLQELvy17UYATDnPuarszyOszW85kk9R9OptZ3+aTl2AJ7g7Q4euStFAZEh+qVkp7nBulHhkkcOQqrriOtTvc4VIG0VnVndAPol9WpAAAAHQGfFXRH/wHEh9YVOFNotns2+xiYacAEPlYTA7/UAAAAIAGfF2pH/wHEyUZUbzcKQqz50LZxABCdsz0rvMqF2XUgAAAAdUGbHEmoQWiZTAhP//3xABPXbDjgfkOVwAHKwUKNpAiRXfOYq0Jv0+5syE/gQCxrhSf///t1Y7t6teDSw41Q9omJIcVM8VUOTsV+cma536ycqRfabEkiGp0kqioCvVrUz+KnlbSrjmWwR9Oxe3r+4VxBwfudaQAAAFRBnzpFESwj/wEeKbPByeX21R/2C4RZAAQe6axdtt3xCpQNQX0jJjBG3Mgl8TqLnISCSpOpx0RH8Cg+Fqk1WBt3jTq4Bs3w6R2qLZJT5BYQlCm+iKEAAAAdAZ9ZdEf/AcSH1hU4U2i2ez5LmONEkAITKwmB3+sAAAAiAZ9bakf/AcTJRlRNOhhkLWCZLdY3i1rFcbAAh8rCYHdoQAAAAHRBm11JqEFsmUwIT//98QAgxqMiJSFjJZEV7CAC2eW/Uv+5W+meOkFUre+lxXhrUJHe6Y1grMQdj6C/ys/wzbUcuN2f63hunqkcJb8nZWz4ZzqVra4p6SaYjS/l5yW6sZSW5HctwcGTY6QDpzXUYRP/cDxx4AAAADdBm35J4QpSZTAhX/44QAfrRUZefCdkoAWuAStLX9tu95e7iuyDCNhxCr8kmu0r+KrlRWsc8exBAAAAVEGbn0nhDomUwIV//jhADW2Y2EIcVs9G8IOreIIgAbFkpEWuhK5yIHFjFju3V1d7BgKpecbg/se7B7daLQn41UGgrQso1U4WBj1TjTkfHk0Qlk2vQAAAAFlBm6NJ4Q8mUwIV//44QAf3f++FACRwDRlm1fLYi2785bHFDMApMToKkC0U9DsVJXXRSrHJY7kHf+RVyZt1HwfkAJzLDQXm+DeGeAnnsioArFbyvaq7AUc9IAAAAFVBn8FFETwj/wEeKbPByecof7X8/8AJbJPPhI65mtq4AAvKeqb8ZbhRnyokdUVx6vHInB1Jkyno3a0r9w55zpcK0x7limK9ohGm5GfEpy+aB69kNKzhAAAAJAGf4HRH/wHFr4pC/f5W2xmorDgADYmidBxxsdXwLFKaTm704AAAACEBn+JqR/8BxX6U0rIPcHSsvMLO2QnVlAAIgU7ToC8gzPkAAABkQZvlSahBaJlMFPCv/jhADWztmL57Qmf12+MoYBQAIb0KnGQLHowTy+qC6335zVWd140Fx9nFOvptkAHISbCwK28duashU1yaWHeIk+b62BvhhQqmDWp9wWneUhc4/LVLDALxuwAAAB0BngRqR/8BxX6U0rIP8bVAOT5iNQANnrLog12bgAAAADBBmgdJ4QpSZTBSwn/98QAgxqMiJSFjJZS7vs9R350P9nAA4sfLjplvIu2tZD141UEAAABGAZ4makf/AcV+lNKyD73BR0+AAvn/bv7RPeMl+ycRpuFqi06XT5bI4JmJeNI3SSltTfP3o9bQlgp+G3V2t1RRzR7x4sEm4AAAACVBmihJ4Q6JlMCE//3xABPYKa0+hXG7EAHFd3lRWb2Bz5wUoYghAAAAeUGaSUnhDyZTAhX//jhADW2Y2EIcVs9HMS8HR/oEABB86S5ZTebIBVyAh2dwlFkTgpQIo6hvb2o48+yOnJsIlvClyhvehnK53Yu12EL1r4b8Nj5DSIxtVLTF2IumMPIbBjcToAZkpsl4xMcpWNssVHpTziIxTxof010AAAA5QZpqSeEPJlMCFf/+OEAH60oucxuu73r4ART2wY6kLo58SCRuMFu6ePYRSpIkP2fyyl6jbgdv79EPAAAAZkGajknhDyZTAhP//fEAE9dwpQIABCzJQjujOfXXnYWZnNNSj/47F5PqHnbOcwXnjDrM4kXNC7wYz72OEV2CUrtbujyZwTlvsXm+QO5ib24mxFLcZ16JDlavFLYpNEqls9JeumsHgAAAAEtBnqxFETwj/wEeCjnPkUtBzzKXVPjAAfiGnvE0PF40o47WF9Eg10UaXiJW4fRBPNfT/fHtRQj9JCrgaeW9v9TpzNlVvNoOo3UbI4EAAAAnAZ7LdEf/AcSH1hU4WEeXG5m6gAfh+Ch4FdA/msf1FT/4jfeaF2RwAAAAIgGezWpH/wHEyUZUb1UsKIIEqABOLo1mp4ORcew5IoJQSB0AAABvQZrPSahBaJlMCE///fEAIMajIiUhYyTI6h7gC8IAH88t+YhCd7TrUHAldR2gvhD/jaAcNf99YwfxfYoHRzDicXJcHDEIR+RokNFgiEZ+H8m1a7NK4qZ6qhl+MUOY9uoHoxiAPyV7Yp2OCWtjbeCyAAAAKkGa8EnhClJlMCE//fEAE/5PrN7itSFUkW0jZVSgBKTs4M918sc26kg3YwAAAGlBmxFJ4Q6JlMCFf/44QA1tmNhCHFbPQzN1Jz/kjrmAEKYvT7Qj4rOmROqMCYteZ/I3SzSSGRGFDemzluG6N08axQkMWj/tPF2QHz1/haR33L/RQNJoe0v9HmQDyozWgisr4RsQi/jMMrEAAAAqQZsySeEPJlMCFf/+OEAHv0pbKhNiACdZ5tjDwHz/abtRzm/ZXgp+6mBhAAAAaEGbVUnhDyZTAhP//fEAE0oQ21SC2i0N8cADYmSoQbVQAQYU9WYTdAzdimTAW1/LXe1haodkTvL09FKETPiGnxkmQiOJoS1OhMou3ylqcK0BQOM/RU6VlPuQA5cspx/2k6hxFQBL5xaBAAAAQUGfc0URPH8BxbiTleQKUSf8iHdZOggAJmuDBlwPRtI+efwNa62lrMcbqGANOJyqTBxiwMlXfsxUrZ699UZ2DlLqAAAAJQGflGpH/wHFfpTSsg549EKHsnABC/fC5DeCW9F8td3ChO//q5AAAAAyQZuWSahBaJlMCFf//jhAB79KU4a2x2U8AEN6gZV/RYbUPi1aHmLBVPY9kdDlGlb+LKEAAABcQZu3SeEKUmUwIV/+OEANbZjYQhxWz0MzdxmACKABOOqOxnMcIueQYJVfpe57L0dWMTIKFyXtvx56w1xIJewJ6msCU5WGBdoQkAfPuYhmxhieA9DdXj5X8g0Q494AAABnQZvbSeEOiZTAhP/98QATZV84BIABasvwbNGNzv856r12IQrUJ7ikk39nVDHZxdc+h9jH/IYHvElrQ536X37Qg9hJiXJ0KArKoUoeKtheW6AGWtaObvdISTDPsMrN82KVVFoYaZdfuQAAAFJBn/lFETwj/wEeKbPByexwPyPF635ABnPpxjHLie0pIwTlk/wWgXvZNHxG7wKEmDkQqGfpDg66gCKUlkt2mx5ey3pWWJdJ8uigDlCp/FyEKbnvAAAAHgGeGHRH/wHFr4pDBsstL5BWZUXhQoACH2pdHH5QrwAAACUBnhpqR/8BxX6U0rFKmXHVJtHcnDeAANoJGXISl1fDCg4R3z3hAAAAOEGaHEmoQWiZTAhX//44QAe/Si5zJlrkgED1SK0dm2RlBEWwcrbEFxkfOTYICRO49penIKp//yfUAAAAc0GaPUnhClJlMCFf/jhADW2Y2EIcVs9C9cBkw6JYATV297khoGZ6AKGAXTC6MjtGV4AG9TV1Q7GpvnxsosPlsqlErYZToaP1gIAMghT4J3Isc8s6ecQPUAhp2+Tqas7R6iuMyTO3YlVJwomMIPdKJKnI2rAAAABsQZpBSeEOiZTAhX/+OEAHy3/oeSYi5CUAAgdCcRAzfRxqwFKr0FzOA/T1upW0n4YPNIrYadKYUfsSOryQAPoCGPvJiJQxKlaPLDWXxKIUFjI7C3csqkfxKKu0CP19DBUzoNUgG4xgdNwLWT6hAAAAUkGef0URPCP/AR4ps8HJ7VRNjPKc/2HRAB3E+lbfU49s3Y0Z1xeFHaK9w+EHfa7M05JoEqb+EPvwjzuSJvOlC0xRqC69tCbw3V1u2Io+0MP8ekAAAAAgAZ6edEf/AcWvikMGyzta1d6T5SP2TZzYAEPlYTA32YAAAAAfAZ6Aakf/AcV+lNKxSp2oo7enZpkTuQAEM63gz8LrAwAAACNBmoJJqEFomUwIV//+OEAHk0pTh61LZzlTXAA5nJgpV0228AAAAGFBmqZJ4QpSZTAhP/3xABLuIODbhupAA2o6nWEyCHiOo3uvNBIW2rTRXRJqsWrI0ADaxksUTfpFH/uJOdASACtfh8zJZiRQfjxkYq41DOCn461slok4oyGDKyqRAacPZtqhAAAAUUGexEU0TCP/AR4KOc+RSqPqRqw+/ABDMWZr5JirxLgVuIVut0LJBUlnD3kgU6c9hF1FjPjNLBSKQshvT/DcKjvymIKInw3DfKAQxEUWqVY33QAAACEBnuN0R/8BxIfWFTYiNXbUJcvOOAEJlWaCF7vzc4v+uIAAAAAeAZ7lakf/AcTJRlRkmRXeF2zbjgBCZVmgkQwSUxtBAAAAc0Ga50moQWiZTAhP//3xACDGoyIlIWMa7q405KnfGACcc79YmLbrjvLxcLhmbU5db43WbIIRjL1mKU5jozMb5F68zh6P7leiKmN1ke3eoFee6KYOUqrdJIEtpdtcWZwL4VIZyBDgInv+1jZvW/iUkIMYb/IAAAApQZsISeEKUmUwIT/98QAS2P+v6Dk8THNvAAb/WB6KduJIo+WTNUlLvi0AAABsQZspSeEOiZTAhX/+OEANbZjYQhxWzz9zdwdH+gQAEHzpLllN5sgFXICHZ3CUWROClAijqG9vajjz7I6cmwiW8KXKHFiKuqK2WAKZZdIrTAjGMd23o31GcR6n5izaSyFZeRwBJV7JR9uw/ttxAAAAOkGbSknhDyZTAhX//jhAB5NKLnMbru96+ADeYW9nLIg1iQ8WSSaYrE/LgwImpxLWs9O0o/c3hij+ChAAAABlQZtuSeEPJlMCE//98QASzeGzQgAELMlCO6M59dedhZmc01R2vg6J8Mv07ZzmC88SNjrdV0VIayVt6hF2gb+fNd3dVdziPFYloxAb0twfMcfnb4ZP3p6ev5HjIrMSjtl90vWzWIwAAABIQZ+MRRE8I/8BHgo5z5FLQJmf03Z8YAD8TMqnsxGNbPulPfdVgUnlW5qkSMSobnCXx2KRHHbSZDSffzv1u+VN8fmb2uOB21FhAAAAJwGfq3RH/wHEh9YVOFMGEQfsRbCACZaHIT0r88xlh63E4qvmCOzgPAAAACMBn61qR/8BxMlGVG83qGxOptYMv4AA/CyKld7HtzH4cDX7wQAAAGhBm69JqEFomUwIT//98QAgxqMiJSFjGcIp3hE4ATLm5CjNFvbjJ62vK6ondTSSNV+gk+/tIeZ4lP5GP+tWv02Ji8ULZZ8E3/HYzs/ND5+JyluWdyDcFY92vhtpDfow043mdW+iIpdW8AAAADpBm9BJ4QpSZTAhP/3xABLuiaze4n6QQDRqniIrT6n9jbFSg/epjaZQi/BO/O164Dq9V4edYnwkJh/xAAAAZUGb8UnhDomUwIV//jhADW2Y2EIcVs8783UnP+SOuYAQpi9PtCPis6ZE6owJi15n8jdLNJIZEYUN6bOW4bo3TxrFCQxaP+08XZAfPX+FpHfcv9Eao/+Ocyfz63JOFjh3A1vGm9zdAAAALUGaEknhDyZTAhX//jhAB2dKWyoTYgAm9QKNTcTaxBxi6m09sUW6pDFon7bDEwAAAGNBmjVJ4Q8mUwIT//3xABJuIOMpEFZ8AJlzvxpEFzimEGe5HPPOwVG8XvS5mucJTdAuh+2te+sr1kmGLEgpLjbtzwjxHgs/3+Y26C3KGxpTwnQsKSIyhO4VAt2il2cl3Pbtd8EAAABFQZ5TRRE8fwHFuJOV5ApOVfexApvTNqAEtXBhPtaO5jJm9BS7xVYJzifZdhR8UXr3Y/Rh/Czgtg3sBB/xNLvR/1BcJD8wAAAAKAGedGpH/wHFfpTSsg5g0fxJcnOMAA2KzQSvYBrooY4GTm6Uvk2+kcAAAAAmQZp2SahBaJlMCFf//jhAB2dKWyoQCABtA1rM60Z4AB5XphjpUoEAAABtQZqXSeEKUmUwIV/+OEANbZjYQhxWzzsEgs4QASJ7tHQLGQHi77a47WmByQseS8eErlvnpwSc4sAlPfx4IVUaoRjUX96282+gaMNkcUD1CE4plfLhQjB9j2/W5o/CVW8KfmT9VZVN2m8SHRlKgAAAABtBmrtJ4Q6JlMCE//3xABJTX6s/gAsbU1zIxMAAAAAmQZ7ZRRE8I/8BHimzwcnscD8VA/aRChsJU3kp4AfgEp5Bxv4YIhMAAAASAZ74dEf/AcWvikMGyxq8LQwvAAAAEwGe+mpH/wHFfpTSsUqXJcjLfxEAAAAnQZr8SahBaJlMCE///fEAEk5tBdEbgAC28eaGe9AoKx7BM8ecKFyUAAAAUUGbHUnhClJlMCE//fEAIMjr+c2OFQnbt8EYhIAAm446MyloPxEAoonwR5HeV9SXyLoGuJW9TShWOT98+4lwbqh/X35xFtwtcgqqnJIm9Ba4LgAAAC5Bmz5J4Q6JlMCE//3xABJObQXRG4AA3LN4/TpTCnlUVcyrR9Gav5cylCvq9UsTAAAAZEGbX0nhDyZTAhX//jhADW2Y2EIcVs86nwMc9JdbinQAOAm8VioC9//EcGHBSZHI+g2O/MLlc3Cjgds9eFlRP+ZWdxy3zjOUhJXPxpfSljJ2wOaVhptUveF/CBEbTC3KIJZmM1UAAAAsQZtgSeEPJlMCFf/+OEAHZ0V7KhNiAC6Czh7TSxdelYLAuTEDjAQeG0lmcxMAAAB+QZuESeEPJlMCE//98QAS7iDhGbAuAB/PJVVfrbHowTueE9H9A2r/InlYlxjuSQDRiUXnG/K077ePt7jmleLv4RrrJOuTa3y1FDK7k9ZkXA9x5VHBp6hZI6Wpzk9ev3TPFsd8CQWUHEVAZ0FIyV5bUArdvfB5ahvFfPzZHrEZAAAAVEGfokURPCP/AR4KOc+RSoXCVf+/6Ow5C4DRuflgANl/UR3D1cB3v0oScQdjV5kZPZ+/Z6RV+ZQ/i1TeY1AgYe07Lni+p6AlSCSm1O2ZfiRf+cvqVwAAACABn8F0R/8BxIfWFTYipZ7HEFUIQaKAVv8AGz38bOqrgQAAABYBn8NqR/8BxMlGVGSbCuYIJDpSsIChAAAAbkGbxUmoQWiZTAhX//44QA1s7Zi+e0JmvOQOBqsALW+opKU7SogluueXbALCoyiKy0CnhwI2swmEI8zVQHJcfr985ooihecHz/Uj9CNwiuLXemxbg9yK8v/C9jyzda7Pl2jr5/KXez9jErdHDv1uAAAAYkGb50nhClJlMFESwn/98QAgxqMiJSFjGoQJ/2IACY99lRHfhoAQACC/vd1mwMBjaLjeWbqL4MTozztZ8LoTQvpfn7MEBXRMVev04dc1rJCrdiAt2nZovMLyJJ6YJsnrP6t5AAAAJgGeBmpH/wHFfpTSsg1Gj/LfsiaIyYAJpKs0EiUXibutMo6BvK+AAAAAO0GaCEnhDomUwIV//jhAB5c/33qmdFp1wABDQ/NanDVXAtqGle7I280VYM0IsfwvFP/izfpvcxmeWJGBAAAAaEGaKUnhDyZTAhX//jhADW2Y2EIcVs8/c3cFCAIACZ3XdylTdwZjedVxRu1Dcal+XzT3i+LFD/eKc6Um9XSlFa3+JLHmggrbBNUrnLWgIiD/uOsyUnPgkM0E6o52bG3kGiE04zt0S9tvAAAAI0GaSknhDyZTAhf//oywAfLtM9lzvVlbGZhQANFVb7vadyvAAAAAZkGabknhDyZTAhX//jhAB5bGkRNNqQAg/U5oTOrjWGWBV10JRP59OBDRYfLEFL3qeD719Mtyd/tJMTspvVWpNnmr8r0ucvJMCbWS2tBNEFQpI2Nq2b+dyKIhBJj9a8PSvpP1d6+zlAAAAFNBnoxFETwj/wEeCjnPkUs/fvNct5zQ+I1gA2nDFTEyrLFUZvrDyzEdN2mWBt7tY6YwFi9MC+RyHzDMYIEfc1ZI7DPD0lsD/BbSntyGWRe73+/vDwAAAB4Bnqt0R/8BxIfWFThPKNXs6WSwAGz1oCxZzU4qr+AAAAAdAZ6takf/AcTJRlRvHQtZsOsWAA2etAWLOanFVf0AAABeQZqySahBaJlMCE///fEAEuRbDVYGwroAHPtUHKOTws0CfUES5c6GA0DvGtHC5WSSLsO7gy7frPDCuLIaMJuc9tMCQyVaqpvRCHLoD8wua+MNvwn26JhjfPAhX7fIWAAAAExBntBFESwj/wEeKbPByfDFfGf64b2IzkfykABEHRSrKKB/cHcNdV6kwSgFy01JZflyn/vpQGdsDHGZXX/YJRRyi/H1x+59JeHVRjuBAAAAHAGe73RH/wHEh9YVOE8o1dgyPhHOsAEPlYTA7/8AAAAbAZ7xakf/AcTJRlRvHQtY5X5wsABD5WEwO//BAAAAZ0Ga80moQWyZTAhX//44QA1s7Zi+e0JnRD8uVWAG2Rm61FQxKYbU/OOSUEt8tJs6pMtgFqfai6XB2DSA1ib+zHKtuNW5aTSA5vdpP224Es9oIoHGTm+vXU/74zld1COprMAAEiomjzEAAABqQZsVSeEKUmUwUVLCf/3xACDGoyIlIWMgZkVQROAG2oTW1wDpxjnlVaqAaDiBHcy5Wrk/XVUbB2vgqgrfUiT9jg2Dnn7l9AdUQ7JkUrME88hqE2yu4V6v2HFVDqC9x19V6V7L3jKYHDbVgAAAACIBnzRqR/8BxX6U0rIOeLTc4HQn/UACcMLdlAvYRyF9Wn64AAAANEGbNknhDomUwIV//jhAB79FNZSVukFAC1wCeuF20IXvubCAgtM3sCprCjCigVrss8KPyfUAAABYQZtZSeEPJlMCE//98QATbiDg2pIgAC1AXExf+22/d4Qcuazj0g/5Eqi+LpUrpHStIO/8J9tf4V0PuYlxx4xOmMSDX+wSjfai9KJJyIZKLg/tMqnX8C8MgAAAAFRBn3dFETx/AcW4k5XkCliEuv3RqQAAkTtdijs6EflckPRVLWvp9bsWWV6d+Jqr1WFl3qmuxj/lknmX3DrzEvqG1bc/O+TeGvDSQEbn/rL8dSE78oAAAAAlAZ+Yakf/AcV+lNKyDh0qK/YucXyJBAAh8qzQSJNNLtEOjJemUQAAADhBm5pJqEFomUwIT//98QATTm0ByUQAJIKOJiuL416OkpaOIXYhYqSKckJxTga0iZAkzpBOblY1gQAAAG9Bm7tJ4QpSZTAhP/3xACDI6/nNjhUKGZq4zJb74wATjlp2SdxeX66w/MxQVbLB+20F+rpW4H6JTFrVvUu4zBXjZqjSc7czKPOvPqL5XJu6xrBil4pXfEq3qHhRpLv9qnxsgu/lexirg8FV4HS894EAAAAxQZvcSeEOiZTAhP/98QATTmzvPuir39AC1vjqY/9S2S/JwT53XpbdbZVu/u2w5QPlNgAAAE9Bm/1J4Q8mUwIT//3xACDI6/nNjhUKFQA1LhtYATLnfqKhcw+GN15rI61OtbK0HXh/jkpfuuQYEdhlZJvbF7eb0SVy3rLjIF+AG+XcivPeAAAALkGaHknhDyZTAhP//fEAE05tAdTEgAuJkQpv03UF+z1o4Q8dFOn/mUBW4PQ+QMEAAABlQZo/SeEPJlMCFf/+OEANbZjYQhxWz0GfAxz0l13WdAA4CccrmIifx/kpuEvq7stpC22tEfbcS0AKxpBHsmk4y5HCqvVY4Nv8HiWVeIiI/XeMhLit8Th0IdvLUNBNORevftM9lYAAAAA1QZpASeEPJlMCFf/+OEAHv0V544agAmd5K0tfHbe6W/oQatgKmleruY2naQN+uKM2vKS9ssAAAABwQZpkSeEPJlMCE//98QAT/dXCM2BcAD+eSqq/W2PRgnc8J6P6BtX+RPKxLjHckgGjEouhwKdHSAFNbkBCZBJ2V2P51FyqLztCZdxVy3K/TGHRojBLtBTimhxVDQga7r+izsn2XNi+fJg93l9a9SrB4QAAAFVBnoJFETwj/wEeCjnPkUqFwlkopFYzpxjrlG58ggBDuPCPwgSPY0dDkxB7L+fi0eGNjX6Pw5IREvUXTwEM+aAHtF4tjLYAfyQb5ZMcck3NzvzdNlbwAAAAHgGeoXRH/wHEh9YVNiKqoqgktpw7MvYAGz1oCxZRMQAAACUBnqNqR/8BxMlGVGSbRZ8zPJL+ACcM4zsjAcT4FkYKD7zG5Kt5AAAAYEGapUmoQWiZTAhX//44QA1s7Zi+e0JnxrebSgBa4BAeC6HLW3ZOm7XZjeRbkHFC8PK4ODz8YgP2I6CT9e0Y/Yh0E059YmzD6UHq7VZpV2A46ZujiMfCtktfApoTGjLZsgAAAGFBmsdJ4QpSZTBREsJ//fEAIMajIiUhYybmRWmIgAezngoI7Uq1L+x8C2EhqCseI6kyLZso2hluNef4JDKOOMQ7+e/6mXjfSLguTOSa27lCi6XlW7Wih51bzEXYJg9VemuBAAAAKAGe5mpH/wHFfpTSsg/xtNzc1AIIAE3AF6+BXQP5rP2v0r1xW8A9kcAAAAAzQZroSeEOiZTAhP/98QAT5q8V7drbYDgAljT9aF7qXBcbofkblmxKewUsPXbvlQMX+3YhAAAAa0GbCUnhDyZTAhX//jhADW2Y2KuSTAHM6iJnE2ZU9HMQcFB+mvHMjQRCnhmN51XFG7UNxqX5fNPeL4sUP94pzpSb1dKUVrf4kneWKJgyi/3sS+2aIrf5mooZ5UJX+3qFrKxxMIsVDR5J9myBAAAAKkGbKknhDyZTAhX//jhAB+tFc4etS0qITa4AAuFzCxbJXXYC8rlkGpWugAAAAFxBm01J4Q8mUwIV//44QAfpmv85qgABDDmahiY2O9EzmXm3IAHoe8b7JOS+0excSV5w1mHBFBCNk5tMRNzb1CU2Gh4EdVwJ+7sCLTKwNdORs+CdRCfo5ECqkluPsAAAACVBn2tFETx/AcW4k5XkClkwqsDJwgBKT6Acfxq+C8B668TUAfFBAAAARAGfjGpH/wHFfpTSsg/ppvgAL6jtQv0XEoH67CTLRf49UWsZo6Sea1zTQVhZ9VGenXNDrXGOJLF0w1y2eJt2OQSR7pfgAAAAKEGbjkmoQWiZTAhf//6MsAIQF8A7dEuSCaEAH4ZTchlW8hyVQbgz+CEAAABgQZuySeEKUmUwIX/+jLACE8b/BVz9ABem579tHtqKpxKIvBNbuAR4Dip/eutd+Sl3HL0YNdKnDPtSqBlnML3kx6+sJmq1t/hx95wAO5mRsav1XBgtL+oDRJau1eELq1RxAAAAW0Gf0EU0TCP/AR4KOc+RS0JnpwAZ+fmaZ9BxFUBbqC+E9ccCO1HOSNRBN6tu5Siwyb2Y/lma7jUFo7JeHwrr57T6EkqHSkIawmMj3VDAu25MPaclOqAy9BrUWB0AAAAfAZ/vdEf/AcSH1hU4V2b2e/sTlX5rKAAQzrh8lRQxwQAAACUBn/FqR/8BxMlGVG9VLChq1sMGoAH4ZOhV7SMYR7QVfrwRA/H/AAAAYUGb9kmoQWiZTAhX//44QAf3f+j6MfwyH2qgAdkXR2ICF0jrsgDGBuAgqhQ6/0KFW5pG/dExzXmpTPqPwUQmQtdh6ldqoRR11o0ZSUqzJtdX9yCyaZ+9TgKKGgXEi30/RD0AAABRQZ4URREsI/8BHimzwcnw0JV175EpVwAlR8VYpYOKi7hQ5PwK8BmloTXIXtXwkjqPn6jpSVhPoFmuBq5HAQ6aA6gNb0djMZSqNYW7KAX1a9H+AAAAIwGeM3RH/wHEh9YVOFhHi/rQJUACbP5ZA5Gw2rTH5QCclUX4AAAAHQGeNWpH/wHEyUZUb08YMbgh836Z7AA2esuiV31BAAAAYkGaOUmoQWyZTAhX//44QAe9wzwOTYfIAkAHG0JV/XTrDcpv2H5D++FljMR8pG/PFpRvdR4W/CuzTuSEH/4s6feYIVeieBU0dM6Zkt33pcxAtBLwRAI2VfFPsfHU3v4Wa/kDAAAAS0GeV0UVLH8Bxe7duqYhRWEMm0TUu7gAH7Zc0YcfJUAdKePPKCvi0GeylYK5hvXS5AIIPEUEtpF5Bqm3xVNI1iuW8tZc1boKn/5dQAAAAB8BnnhqR/8BxX6U0rIQDA/p5bevIAAhMrCYHOanFU3RAAAKKGWIggAN//728P4FNlYEUJcRZPwXn5VAwXm+5kWTul1n1iiUjNKxR1cZJuvrOF76NkEccJfEfg4SrWWCOO5jTEgWRRyQtm87nN5QW8QsMDSemc05Bh/zi5GH61PxSf6OpzGYx/CJTWb4hUdKFjtcm9d/vyFyJV0QNE1E9Y/EX1XxVdGDy0V5K/uA703s7eyAqz2zBhBmWxy/U+a8QQ54RQ696pH89oOT94xplcDAnqNO5f9Xhr2cjo+fdysMc9TVhJB+jt8QXV2Y8O+FZHJ7cFBijxgKtCkQCiJx5BoSaqclUK4CI/jqO1tzDns1xNVUmGV9HLk9pcRZ6eD9O0cotcnrGwEBRvwuaQwoMyKky6UYrhRLKf2mSBvJMQAeqWHsTs9c5ZeY055UceC8W66mUpRrXpd4eV6kla8dQ9FuWimZz4BcH0xemSSMuSwudgUAEKKs/iaNEfnmgZ20XalwGjQDNaf+5lL8zvXZORS2d68ZtloeAgr5sEPcN5sI05i/95RAqVP8oLr0T7AMJUSF9ah4lsH1dFSwIj9Z+0Dd0ERRXwdvKFERg2Wkl6CdroJ5HLP8jw8jJKFfGZlwWl6mmn+nq/vHwSOUoggobpmMmkILUBJqxGFRO2Ms8XpELpr7OhLico66Iszy3tIplJc+J4xOS18zzhUVBjWNyP5WxDJEpp2PANHQ3kTCBzAOkBmPUUO03eWR+WDSo1QhHvo07AnBMvbmtIvM0L4ATH+HPk5MAdN2lteatFEUBV9OSZYymIrouwZxc+NkVRBfQPSqh4JKinoMBUdY5rwGRIADCstUffuZVv4SzhHnKDpZ7tCbeFEZ8HNSuzQTJ14CMu3YG1Rrvm0RtE2IepeVbI2mnA4UutMiNcBpP+GjVF/w/r4WzivD5HPaMWQ2qU4kWivUoxj56Fz9B8L/Wlbu+g64gTTvHwAgJwpvOpjA0G4/lFVOIGiSL/0Uv19077jqe461Vc2MOyA47NkcxqE0nhdoEis1+seMW1mjiOQiD/fsDQBL7JJKtb2POE+x2OAMqrpw5vMi4a2sMNyeteIAx6utIaKCg7qeGXmP6MIbwap9WzIjqyZV06te4sVukqaBpxY0ZoHncjOMT2XKDfeRV9tCoCoTHVYEsFoZwdS3LVvEF+GUKQjwilT7QjtePiGdFbDH1/oKHceJCJHtR/nY4EPZbMHFYQeU8jtXuCHEAGQ8P3SQlio37SDiq/Kv74UeTyTNcTAdGldS2E4qTTClIVWLu5n9O1gZwvDJOwyK0QMgQdGBDxbkcbrXKOqg4sD4p/sDJ3RXzTLG/4bXbr75t/+VczcuY5Mnzo/3si1ah0BfeE46h7kvCNzWu2zelKXy6ebLF+JYPtxTt0ugv05zix1cAankeFd00tXD0l3amdl9KFYtYsXhv7bhAA5nsky5t6k8DSUbixxvMkS2OCj0b9a+Y4y3ZUC6fBt+dCrkJ5boMRKX+dXYjJADtt6SSWy+kas+OaVZbAoEzLKfrjTNsF/jFmJ61rx6OqmNYFKHvJ8HlP2em82crZprub1vZ3ySzLRD5mk43BECyl34/+ntcE6hE2j4I0bmNgUG+zqVZczIkUDDeTXzlWPGx0bYH0mWOBDhqHdxAcimzo+H3Uxh1M4ykWHCJPcelFXxZJZftJPNNsTM7kXexKKTLr3swqoQqJ6iuwkVQcSCpUS+XaL3sR5rqPOgPZkAxWbI3cyQARMEQk+wNYxN8yZvrMdCdEff3N9zG1FEFH0egHu2Lmnw20b7xmRb2jrxxHmxKPpTm6AN7TX2eomzpvoZVMjmISQLLYqZb7i0ONjtILxxyENJ9JKB5KAurjk6rzJ0yENf7O66YXBaayKPXZwCU2Mk3z4RT3LHnoN3XvG7ZYnxii9MPN8Ap8Ijd7/ENAtq7CTtWTmkCgP2YA4m3429UAACYKY/vkvbzEgCNsX0WgbHAbPi1cn1G3aQHlUFQbXdyCyYrCgM8hauLPTdJlYoCpfP+iiGJyMGh8hD+acV4qlufV+4DFDAbX0R2iUIF5fSps9V/GAszbKNjFsY7KvOQ3AX+KoJWiZe23qmbWQUv/hW9dHGvTiDSKI0TElQU6tEzzmiaSYZvtA58ptJZUWe6eE6pEi27i7/aclP8PxJ5BkGV2Cy8UpF7eEnT0xUUAxNTaAoI/x34858P/Q/sfGLN0K9VBKUzOHZ/+UjdjxupzQhyapLizz10ueA1gtSTiqyDRwx474/U2N2FNNqpmj9GUoLir1kiq0NP/mBnMdjXH3/ERDOcIi9QclJeWljl1Em38h1uPZSFw5ajNQL7XhhrPxWvQIRyhZ8cfaS3mMcTskWm/g77rtqxUrrmEJ+fD7N+xpaAqWPfAoY8J6h1jjlApMEbfYZLGSo7qD3qQWaLyn/nAI0BwknDjzItFvgms1jd/LzLAWWRuPZlP8RXWIlJOwRorVYw24MkBDaM86tVRCfEsruwelbNi6TahokUHnQIyxv9iprgOlw3Pfwc4A/ZkmpF+AMkb9dEpbLkAxNf3Z+wzLPYsHbp4xRBLdS91NL4+FkFXcAaJq30ru+QVqPVsEh3IWrx0nBJhT6YEpUD6/bm1vdqvBcHIJg2vDpegVOqMiztH+xydsN0uvYnnIkUVgrAZelMKO7ZCXqmGYQarlb8susRMhBEzqulfySY6yDZjY4viZ3VFODOy0SgoMIjpb6cwjC6IYR1lkKLB/T+ZRskxCn7K5gs2TaqC4buMv9SOS+SNlcZtiG4IXr1iP+0UHdysRoQ1/1wAoTSmCItGXmORRCV/B3x74cPnO6h+hcSLQyYQxLLxzi5bhadMtTwuZWex4N0w9zXg3QdLC3MLDvEsVZkzg6lvb/oI7YxubjekHRqw+z7a0Dmj0hdJ4YvlG5G0vV+4KOW6IQUcPM1K6k5qo4MoF22djoOM7ra2BcA9MdCyyujNv2a6UTLmRqEU+X3Mrf0Awju19X1hdXpItD0Ep6gw0T2d3WTOa5h/cr+tl7Sm6R3pMPFNfU1HmNtCh1V2OT1kpotVfLsR81PyOC7p8rPW1OFCSo8MUUFLtO2BFFaWau0SfvgB9kJXRbkCDYmpKSNVht+dQJsbeTWjSTZxwt92EPzgFNKDFIFzqVgp/sKhc7uLiKRLE7e74rIskzMqCUH1sdE/QIa1TEpR6e0jf1EahsQpOLQPWRw1/sf8IrAZKDpQryJP+3aNapF8KffZcgc8azwzDovtK5hCwbnFzdGMNJhpCdDQYELO1RZsCtA6KBMLnVh2lSgVH8oYXKUC9dumPS9aF8JyslqiV34pnWSh0+9D/jLM+iCBW/sHP03CeFXFog965EX2UoWAwZwC++vxcn7R5dexms59bkrOO3oJhQAf9ahL7J2bAbcmKUPP6YFNw8MM5IS/9g6bh+oJC+wBnl4NNanQlQicQWA0goryATpuU6WH15zAHEoGgquPbWkfTY3zOmRTFdNs/pAAAAeEGaJGxCv/4P8LgAg81EmSCFjACQZCuwE6RHglExyVazUMpQLfpEjiU68mcTYBr5W6t5jwZ5pmSPuDC12b0tQFBXHvDHEQov6XQ9uDC3wY5X1gUvH21E46ZHPu4nHKDiF5AvxUHubXO0vXgNHNTmrw0/fjgWNK2RCQAAAGhBnkJ4hH8CWv7AsIKxMbO1loAEpX6/+9QrZskp2aNfKUSmSXsdB/F+q3U0AI4lu7cXhaHLpqdgRYxTSHWcDMHtGacetnDcHSLPQgSVcoLLqYpK2t+N8WbwamXKGOBRYUYP3VyV5iPsKAAAACYBnmF0R/8BxIfWFTNS3PrqBZUADYnr3Y3pmukIIurTaOSsv0/s2AAAACABnmNqR/8BxMlGVFGkPTbOjO0mp54AQQZmmTAmxiLL+QAAAIdBmmVJqEFomUwIV//+OEAbL6hwALpXVsPbolA2sSm5h/6Ifag6TVn41gc0wIlj3N7EwBXjrrKvXS/6Y/9pD/fHxqPJw0zzQjfLWfHwGStAWHhlfbqtA1GA5Npwv4gu2TGjvLPGEaoIfyachGOS2ZoaP+Z2c1Ufr0QJycT0pVb9MAP/J1rPQSAAAABuQZqJSeEKUmUwIV/+OEAbLv3oqn1rswAnG6lwHQBy2BOY9/kwtoIxwURYJf2zG7q6wfnu8FGaqZGTR4gz/6pz7iL2iYumfy19Wym8W6qeSb4/AoKsf720WpnNm2ylOu69zPa9xNp+XX6uKeyeS3AAAABXQZ6nRTRMI/8CCvzCom+0aPwMnAhfGABKFBj0enP865I25biXqzKiytCKq0Lyjesum/hQYpjFKvtJ6nykb4uYM2UPmAFzStq8daTpjtHjlSu0GJhXRRBBAAAAHQGexnRH/wHFr4pDCqcUAQpxUP6gAQ+VhMDXzEjAAAAAIwGeyGpH/wHFfpTSsg548uLgcf3SYAJpKwmAyivqXPtTiiyhAAAAZUGay0moQWiZTBTwr/44QA1s7Zi+e0JnL7IYM0BmhZqADZ0DbJm7R9lhaB9Bqi+Pn4xFnehqUFLJ8sLoEsCDSPibcGEWFdQBZm/TC5rfnlMKbJUSQCZdPebCzp+Cp2rDrdj8V4bZAAAAJQGe6mpH/wHFfpTSq0NFwGFYrDML8IAJdhPewMtJ8HrKrIEugIAAAABXQZrtSeEKUmUwUsJ//fEAIMajIi68dkKGbDroe4bLet56sQAeKW84Dzi7mRx/bj8fLF78ak00hOFf4XEeuTFrI7dZFY/ESv8y0Gh8IbdVGHsUTySVurfbAAAAHAGfDGpH/wHFfpTSsg6Q9t7W29+AsABD5WEwNi4AAAAhQZsOSeEOiZTAhX/+OEAHk0pZWznKm0AAhofWVhpw4QtVAAAAZkGbL0nhDyZTAhX//jhADW2aETNJls/5PPhhqxUDaTQopABB5/V7SWGRlJpgqbXax8+v25X72B9v4Gjpvh3Iz4FVmJN6lYKc9oILNpj8IkP+74aKUkml2MJd0PcSB1KpvNmQ0GoHgQAAACVBm1BJ4Q8mUwIX//6MsAHy7ji7XjWbA6ABoqru2Z/Wbi9zMaNoAAAAXUGbdEnhDyZTAhf//oywAfO0fPqI9cQAZab8PUn5FKABrr7ex40isgexnJRh4ALEGjFTaV2eZ+Fdi8D6ox7bg6AGq/wAUIB0Z7L7bmhwkEdDTFoBUfmrSVmmvAD9oAAAAFFBn5JFETwj/wEeCjnPkUs/Ky2M4la6o1YANqLjfNsTeH8Mop5cDQmHoaLahBxMRQvPEMrhpBcxYPaTSIRLI5vtovFYh2MR7BsqSul+z0Y2d5MAAAAgAZ+xdEf/AcSH1hU4Toh3UoDJ9TvsgTgAh+/cJK2Vov4AAAAeAZ+zakf/AcTJRlRvHQJk/qmicAEPlWaCRDBJTD+BAAAAXkGbuEmoQWiZTAhf//6MsAHzeJvrqwAXrHw4QHKOJPJ9i0HBtdIb1e6C8cNfahVb5dnHEC3n8i0JChZtJ/Z9BK1y8BybCgyv0kMV2yI0QF+CoYoJVWBjoTFMvgn1IMAAAABaQZ/WRREsI/8BHimzwcnwyFYwAGfn5mmfQcaDpzenc2BfPdNx5WzJr7FmRZsOY/ejMrZQBOjLazgfI9VeeTQ4hMjVkXzrdcJtOPKlHabtp6fDklZDO8yl+SvhAAAAHwGf9XRH/wHEh9YVOE55CrH9idqayQQAIfKs0EgaJeEAAAAlAZ/3akf/AcTJRlRvHQH5CT+PsomACaSrNBIk3CfJRECS67yvgQAAAGFBm/xJqEFsmUwIV//+OEAHn3/o+jH8Mh9qoAHZF0diAhdI67IAxgbgIKoUOv9ChVuaRv3RMc15qUz6j8FEJkLXYepXaqEUdda1JrxWpA4w2yUav6z6tLIia/2bJxC4518NAAAAUUGeGkUVLCP/AR4ps8HJ8MP3bikoolqAFrbv1AjP3VeNARbCtj83yaXa0qHrqtzSQy/PHr4eSQrww6AYs4Dx65aB4S8nBaZAnqVKPjsxvozK+AAAAB4Bnjl0R/8BxIfWFThPJ9R52OzUvt00AAbPWXRK9NAAAAAdAZ47akf/AcTJRlRvGOnUfA1dv+WNgAQ+VZoI9NEAAABhQZo/SahBbJlMCFf//jhAB2XDPA5Nh8gCQAcbQlX9dOsNym/YfkP7nLdmI+VQXidvFTbAGNiCYlxnEDaot2vzeoTbihFEHXDpTMd98jQkJHNdUuxBCXikYOMG7TbsPf+RMAAAAEpBnl1FFSx/AcXu3bqmISRQGJtSoYu4AB+2XNGHHyVAHTRa00Qr4bWXzHieZpPY7S4JDS2FlfLev8u6CzzomR3ybRNoxq6Q77P5tQAAAB8Bnn5qR/8BxX6U0rINWp/p5nevIAAhMrCYHOanFVNRAAAAN0GaYEmoQWyZTAhX//44QAdnSlU1AfMI8DgIfSImz8NTixnFvBeu/uxmlt1DJfkmPlwo1lU+ZGEAAABZQZqESeEKUmUwIV/+OEAHc3/vhQAqzULiL2hMIguQl3RXNvzSduNLqo4S+AnKaUN+TQLJh/MY6x5c/kS/Ju7Ek1uIm6f6He8fhvWoUOvrC4nykbIAnbUcAYEAAABRQZ6iRTRMI/8BHgo5z5FLPt7fHAYAQcK+DFv3HaB0OBO95sWeaxOJ/y/kUMpxiKiIMqFIwGls3DqwOImkUsfzNx9mrK7FiVUiQqDdV9SIRz1AAAAAHQGewXRH/wHEh9YVOErn3eo2bPACEyrNBIhgkpi1AAAAHwGew2pH/wHEyUZUbwUCZNyVJmywAGsYppkwJsYiyeUAAAAWQZrHSahBaJlMCE///fEAEmcZhKCgYAAAABRBnuVFESx/AcXu3bqmISoJpdqSgAAAAB4BnwZqR/8BxX6U0rIMFpT8nznkwANYxTTJgTYxE/UAAAAwQZsISahBbJlMCE///fEAEk5tAdTEgAnHC6JiqxiXIPwZMq9oz515cPExAg6a78AYAAAAY0GbKUnhClJlMCFf/jhADW2Y2EIcVs8783TCqfYaWAA7Q7krPkwfau2HCrVcQgzpaHWgH7+5Kh1QMtb+/nqCvAdp9GQ8RwA/2NnPOF38cIk/mQ6e2zVv9u0eH9/CbjHEN/9OsQAAADRBm0pJ4Q6JlMCFf/44QAdnRXnjhqACEaErNY+YCobhvaD1w1aj4qGNuslzfstbDCPFr+RNAAAAXkGbbUnhDyZTAhX//jhAB2844zKv5wAC6km7p5lc4M3xY+yxLoO1HbBZSL+QQOlSCrpaD8fcJA7I3ceBvHOm6Kz9I89SrEOGk+JK/cZN9HH6H1B+ud6HdBC7deM/bfAAAABPQZ+LRRE8fwHFuJOV5ApJgZRJl/2E9OguTbgAP4y0XsyliAru5X33qjTy+71Eo0Ee2BqcEobZLhxoouE9vZsFVgrcwrYL5EBlY5XkUR3QUQAAAB8Bn6xqR/8BxX6U0q+xDSXSzjApsACCojdbdE/WL6bwAAAAcEGbr0moQWiZTBTwr/44QA1s7Zi+e0JmvD8jWlADbVyTz9btkL9zxHbECTmu3FvHw27+kFLb4O3y3ZpJybA4A+rkaq61vpB8TYUXqgUXYyDK5vKWbdT7EmHP0xowfIPofgRNO7gA916IkFwL9S7I6P0AAAAeAZ/Oakf/AcV+lNKwDMtGnhLAXtzE81gAhMqzQSTlAAAAZkGb00nhClJlMCFf/jhAB5TI9n+sAEztX1YNIPRgjbDfnqbmxqpkvvejSrS+jFlQA7Yw9eBfC4bdLXKf+ooYCcb/mMTAQ6j8z1sdnJ9Jv6Y0WIZ5e3QqFubm/ObiJNs2gcZu+HLn4AAAAE5Bn/FFNEwj/wEeKbPByfDGn4GqAEyN6YtQenKGV/9TcsvgN9JN+6wxQu4HCeJnD3ukz5EP4KXdplan7k1Za83T1bJdHbELn5Ojt1a+4BwAAAAlAZ4QdEf/AcWvikMKnpEeaAORUIAJk9XrH6armwM+8F8k/PE7gQAAACcBnhJqR/8BxX6U0rINRo7d+NuoAH04rAHLm9DFF3oDIe/UOTc/K+AAAABfQZoVSahBaJlMFPCf/fEAIMajIiUhYxryfzQAAroQiQzWcQs1rYta+kQXWuX4lgcjpKKEddJMonXoDURFO+V1erweQ8WRPESnHiF1dvRq9g6OEXl87sNADIns++MAd4EAAAAfAZ40akf/AcV+lNKyDSQGjH7Ew6ocggAQ+VZoItol4AAAACVBmjZJ4QpSZTAhP/3xABLObQBMY/nL/4ATSorruPGMuFqYUILBAAAAbkGaV0nhDomUwIT//fEAIMjr+c2OFQnxDhBr9mAAFslMznJz39LvHh7TzPBdUIGwG9mM0rzlUCqw2OmPSUorSpRK8fLxMggqGfDwJN3wUOwc9RTtF94Ejn+WdkpSl5eBhgTHi2WHmzK8/tlXH91pAAAAL0GaeEnhDyZTAhX//jhAB5NFc4etmNl5QATrPhZ6u+E7kElatKG9k0c4fhtLPBHLAAAAWkGamUnhDyZTAhX//jhADW2Y2EIcVs8+HwMc9JUY6UgAhutTxxURR+Qet2MmZXqH/LzNL5ZA2+UnPhV4g4Qe6mw2m6fRFfPcUkyXRQ2QzAHVFccdPbl4OLPBSQAAAFRBmr1J4Q8mUwIV//44QAebNzjLavEAG4pZUZ+hg6eFlHOGFGgLMlRLLT6O/PkQv7Rflci/yysWR5dN3R3XvoAK6yvUt5GzOK16KQ77QFuwD9ffkLAAAABOQZ7bRRE8I/8BHimzwcnwxQCXLDMbPdseETSwAP7mX4Bng7ldTHR2PcuRwv1EkJNUY7oQUDYqjFFcc7tBCZy45fRzy9nwk6GAZT5HmPG8AAAAGgGe+nRH/wHFr4pDCp6Ra9SiL8IAIfON/Z0HAAAAGwGe/GpH/wHFfpTSsg1GlPWNfJbAA2e/ogId4AAAACpBmv5JqEFomUwIV//+OEAHx4kmhtEgU3bZtgA4siuiC6fOJmnjOenshjoAAABpQZsCSeEKUmUwIV/+OEAHy1VwZv8iEAHDiobg/n9jII0TbanD24KTHBKSNWSs8tMNYl+QPD3d1EAlnJyiZZduqAXHcQPDARfVeJ7AxK0iUcff2pD5F4O3Fl1RtmcpddqGwCEZI1MkGe5BAAAAWEGfIEU0TCP/AR4KOc+RS0CnkCqCtQAmHWznzG1wJjtb8LQlWhfA2ndHUNAkf+k2fBY3aCujgiaVeFRhykaY188ktbSIm/w7JX/uD5dI10ja5UW3gK2gq4EAAAAkAZ9fdEf/AcSH1hU4U2jFyYBQEACafp72ApAI1Ocoirbux5FBAAAAIgGfQWpH/wHEyUZUbzcLOuJa6MEACdSsJgOUIzux38Cai3AAAABrQZtFSahBaJlMCE///fEAE26JzdwAzWCJ6Vdo6ibHrKX4456vcPKAjmgRa1mycppQ35NAsmH8xjrHlz+RL8bNu5meVX4f+PbWJCurLeX5ECCCzjUX5HH+FBZwiM7AD7dGD2QycWjMHZxYsMgAAABOQZ9jRREsfwHF7t26piFKdgIXuABKHvBB2mYoqo5WwG2rEI/fK9bOr65Ngos29mJQV3AMbf/cY+ztlvrXnThzpMlOiKIQNTMfheMLTBRdAAAAHAGfhGpH/wHFfpTSsg4dKkeI0nTeoAEPlWaCTPUAAAA4QZuGSahBbJlMCE///fEAE05s7z7pfAHIQAtVtTpimt11QW6zpaW5+03AtE8WJAUfE+MlrCuV/cgAAABgQZunSeEKUmUwIT/98QAgyOv5zY4VChctI5YgAfiAYP+d2kdCPo8SN13N+NCpJ2K+uvUPQgXHejLVNQh+JLUmaNrtchvcxRV4K6iAa+I1MlOXbAMlBaEjb+izd5DSj/nvAAAAKkGbyEnhDomUwIT//fEAE05s7z7pfAFzgBNLtgq0LT6FV5/4iOZrYGUYBwAAAGJBm+lJ4Q8mUwIV//44QA1tmNhCHFbPQzN0wqn2GlgAO0O5Kz5MH2rthwq1XEIM6Wh1oB+/uSodUDLW/v56grwHafRkPEcAP9jZzzhd/HCJPJkE75cHIHQ5JwiCwN8FXJYpwQAAAChBmgpJ4Q8mUwIV//44QAe/RXsqE2IAIfU37yDOmf8rocCahtHWb4tBAAAAZUGaLUnhDyZTAhX//jhAB8c44zKv5wAC6km7p5lc4M3xY+yxLoO1HbBZSL+QQOlTB2y0H4+4R336z5cXB+wTiQTSbgvAw9f0aOqp0YUo5yEN8+73TXZI1nLXvc+hw5xn0UhHpzcsAAAAUEGeS0URPH8BxbiTleQKUdcJG6jkSkPSubdwAD+MtF7Mm56rMmA+uaA3+27jMD8EbTMMUWsPm85Q2zK2hlH6qrFy+3frIsjJzYcfSSsvY2MpAAAAHgGebGpH/wHFfpTSsg//ow0uNLAAQVEbrSKfrF8yoAAAAG1Bmm9JqEFomUwU8K/+OEANbO2YvntCZ8WHWcIALRXJwvOMwVSGar9J79Ux5QJUtdxwn4ejXNnQGmuIuGQAP2ya0Uo7aig2lMXHvBSaPOCvPLWaw0tYpHt2ilyGZfH3JxGB2ADZXHDAh1La0CtBAAAAHgGejmpH/wHFfpTSsg/xtN0QRUGiwAEPuLuejoSC1QAAAGNBmpNJ4QpSZTAhX/44QAfsyPZ/rABM7V9WDSD0YI2w356m5saqZL73o0q2nuzguoO2MPXflLCG3QJtX3ENg7gOr0bROcviELDZw6LFNe/WvxlJGXhiEgP79+dVCPMk0L+69iAAAABMQZ6xRTRMI/8BHimzwcnw1GkXXAB931N1RqmhaM4sAB6tuA5QSASffuuMCD4JbHudqFd97Kz9l0/bFU0tO1ytqLweLsDJj+EAIUWBwAAAACUBntB0R/8Bxa+KQwqwwQUNygIAE4er1j9NW4zWHMxY0A2nVO1BAAAAJwGe0mpH/wHFfpTSsg/xtN0ECVAAm1c9Q5c3oYou9AZEN9XVyQvH+AAAAF9BmtVJqEFomUwU8K/+OEANbO2YvntCZ/ZP43wASmmX/YMtNMo8CfjjjyVbcm0kLZHSUUI66SZROvQGoiKd8rq9Xg8hKxQStLV6SLq7ejV7B2JPoJD8tBq3Ye3J++PgswAAAB8BnvRqR/8BxX6U0rIPySqMfsS+qhyCABD5Vmgi2hjgAAAAK0Ga9knhClJlMCFf/jhAB+tFeVp/xE3xABOOqOswUMP98oqVEfk9/6jj3sEAAABUQZsZSeEOiZTAhP/98QAT0iFXMIS8AJa/J+MjPkTUWatsPkRJlVthqVgSg2Cy25iencXG+1t26EAdMu7gcZ5uayzudl6bU37j5uRfxYgb6NfT7x9hAAAANUGfN0URPH8BxS2gqWgx4AalaJ0wT0w79Vs61J6xUhmGS33QGPWGLps6XfFU22UNVMEfoFY5AAAASQGfWGpH/wHFfpTSsC8WF/bcVwAOX9lGsfRA8voORjBnpPIF6X2AvFoVGetNzLgceM5HwIGNGJ57MvJUESgRvb1ZlNhQisgyySkAAAA3QZtaSahBaJlMCFf//jhAB+tKWeOGoAJxrUNwfxVjo2Uxb0/6eOMWfwT9akrnkX2RqfNwXTdCEAAAAHVBm3tJ4QpSZTAhX/44QA1tmNhCcCAJvqDKyd8TP2yjOSjkKkOa6eEm1bi1hnSwspuS0Sosv3yTaUhgsa0f3tfcQ4jnz08EyBOkkJqwlTImkl9kqkbCf7W1Z5ut7e3yUsE7LivC/s+Ja4xIUPLd3g32Mgf2bIAAAAB5QZudSeEOiZTBTRMK//44QA1s7Zi+ez2dViD114M3LKgATO8laPMcIueQXcU/YSsScqK8pqCTbkCB8L9qE7byKJdXOlvBbyeCtPkdADSFVMN5DRZLzzYQHkChIYJpTs5ELeVYj+H5OgXDi4RpioLdrJjuPGcgMZc62QAAACQBn7xqR/8BxX6U0rArElGf0R6dJTwAQ+VhMDcA+A8C5Yuzr2QAAABgQZuhSeEPJlMCFf/+OEAH8KyjNTuwATcZoICzde9oZiP1a+Zy/SDsqrNuowGAiyZ+Vt1NGDlYoRZk5L5ycuZmQQGqvGgG1GrzkRHVWpcSLaN+nsh+R8Dy7EKKWLd2Dr2IAAAAXUGf30URPCP/AR4ps8HJ8NNIEm8Vq4AC4SohVXf8w9ZxR/S1XSdVI2576hgw0IC25H5JIn5zGx/dCgRscvPRfYiBuUmFNp8sfYJDVjD0+qAiDTwYcaaNZBQA3Jnx3wAAACgBn/50R/8Bxa+KQwqwxGWGqZDgAD6kZOBdh8sFyz8DYTfddPozjuYhAAAAIAGf4GpH/wHFfpTSsg/x8QmAQMVvGLX7lwAIfKwmB4bdAAAALUGb4kmoQWiZTAhX//44QAf3f+efVhRcNVJk0hyjkAJkH5jqDsYLkcZR+LhVNgAAAGtBmgVJ4QpSZTAhX/44QAfLVUf2Kg1gA5w7kqJxmwYWvJ8stg85xjCvxRPgrMd3Hf9tvczw6VI2gipdd+HR2s/t2V7o11cXmV2zoe3/vqFvteHfoASCE3nEnhF79gjz2xDQjdq6mCkOHPyBgAAAAFBBniNFNEx/AcW4k5XkClFYQxdqTVYDQAmp4Roahu0LdI4yRcIWp9YqpUtWcszLnMd5rOzJyVdamV8q/Vp5vi0s6gpV7F7hw4ZVxy1s0ANsZQAAABQBnkRqR/8BxX6U0rIOePjErd+jsAAAACZBmkZJqEFomUwIV//+OEAHv0pTKjHZjZGoAHY7VcCoGJnaiUYqBgAAAFRBmmlJ4QpSZTAhX/44QAfCx0qGypl0ABdbsLccCuaHzA0dbUoD4OLkQQu+vqZx1v8Rvb7oAQrihm6u0Ni9ZbJOxFObShQH/ycOQRkuAVojNEvw5icAAABXQZ6HRTRMfwHFuJOV5ApYgDWi43HjDc8QAJm0cbVn36ROMfUAq2qeH8ne72Dg9g1eOlTVRGmwAsIRfZXXGJ9IzEvpZ7k6E+Zv5lIoz4ZRHfcNiCJE+RZUAAAAJgGeqGpH/wHFfpTSshAMD/N8+SAAIL/uQy4PHrbZcF8KzJROQLtxAAAAWEGaq0moQWiZTBTwr/44QA1s7Zi+e0JnGATfD0lTyAD6HbQc15nki0lq+7a6OgXkvAqxqgxGw59QJAMG/J0TdR/yUlES7a0lSEwblxnrm+9PZOL0JhO48D8AAAAcAZ7Kakf/AcV+lNKyDh080RjM+UBAAh8rCYHf6gAAAGZBms1J4QpSZTBSwr/+OEANbO2YvntCZ04l4KEAQAEzvJWjzHCLnkF5SJSemhoI9QT1HrWMJ/iNjHcrSnNNEfmSW1MCu0vSxkB0AC0aU74k3tjZcTaF+wSimgsXrX3gGbVZ83XPDbEAAAAeAZ7sakf/AcV+lNKyDlMLNj9qr15VAA2etAWKstnuAAAAYEGa8UnhDomUwIT//fEAE03jcZwAJKQvDKQ0QwMQGP9ud0UJWRpOYWLOr/+tiIrAhcLQDeQmQbsFomW+hlY7apFwVPsQWx6ZULqxmrsb7lAONhwdUF3d1Z7eXt5hlAY3kQAAAFtBnw9FFTwj/wEeKbPByfDT7tldFUAB+A8ixvq+9kzqVgvNlTP3bl67SWT4vu8pcbvAO7S4GtY2CwPwzyD+VON/5wex6prPD/r6bziM9SNvaSCu3bfbIwLq3X8pAAAAJwGfLnRH/wHFr4pDCq+Pyf2ulsIAIL3i4PU+kMvhFDBoS6YIr8PflAAAACgBnzBqR/8BxX6U0rIP/6MfYJqKj8wATf2VTjvS+HLszFpiGU8ejXNgAAAAK0GbMkmoQWiZTAhX//44QAfLf+efVhuSL0dlI2QAmQmLtRhYzPYIshYJi6EAAAB3QZtTSeEKUmUwIV/+OEANbZjZaYAp7anawWV0x+TNIEQuveEcLBIz50djVqpk8xqby8bUekrlvNTFIUIvceOEINW0iB910eyfbYAw1sK9bTvpjOM1gtttobSE1RTZCdAjbzycDpkxYW6er7srJqWCnEvAhmY8mIAAAABdQZt3SeEOiZTAhX/+OEAHy3/meSlEuKia84ZgADtCkCxn+RP/3hI8/hMQ4k0J1bKknSoUNayVPV+J22HwlScL+ctglDBnF2lFTeEPo601LYko4Bjbsiak25p2DfUbAAAASkGflUURPCP/AR4ps8HJ8M0umzYa0IIWf8AEC8VJVCTRr2q203cEddpU3FfyYQTiHtohq0z4+uHRUGCrcRkMtcghEZsbD0RsP3IgAAAAFwGftHRH/wHFr4pDCqgE39uE6HRuU8pBAAAAHQGftmpH/wHFfpTSsg1Gx0W2CTR9rmmACEkFeBX/AAAAMkGbuEmoQWiZTAhX//44QAeTSlOAO9gLlwAKf1Of882ZxH5FF6VV/jWj2QFFzvt39nKBAAAAckGb3EnhClJlMCFf/jhAB59VcFp2bQAQ3qBmOvI/AwBID0XlRJlADPX0GPEd2ddyYFcOs9ZCp339wd3yWdaNQD5+H400vwC4oCN//vY3K0gOgIv5t1U9YJo/q+VtCGw4q7JEKSpuLycmfcik7n3C7Y+vhwAAAEpBn/pFNEwj/wEeCjnPkUs/OMKvsDwYAD2Uf1DZKbrxCIC+WabYv2I8LdYfn2PiH/ZUSBzdBCTF8O80FOukSXm85oACzoGesNdjmgAAAB4Bnhl0R/8BxIfWFThPJ93UBV1+rfgBCSDUcNokTDAAAAAjAZ4bakf/AcTJRlRvHQH5CUEnnTABCZxvu51qO6GVQgQPTaEAAABuQZodSahBaJlMCFf//jhADWztmL57QmbGJeDNyd8AEzvJWjzHCLnkF3FP2ErEnKivKagk25AgfC/ahO28iiXT86jiS6+07HenCfJoJ8ptEkfe6EBr1suxl9nM2fQyayKd5BT6jpfZnzpvZvJuc/sAAABfQZohSeEKUmUwIV/+OEAHkxV4IOwATX/pvsPlF2p//fVr5nLOMTN1qO7B0niYxBaOdT+QFBUIouBCVhJCQ4wgZozvwQqwY9QD03Wz9c6Vr5SHX10UObCgYtFIdgInJ/wAAABdQZ5fRTRMI/8BHimzwcnwzNWuPJAAuJVQzHM9q+nh1Kyx68+nMOdHlIbXyfCNVnlySnQeEqfjBEyRNfhmnyIZGX7V7qFh3Zz7BnOAzEJr0hUPL0w658dLOjvKk30xAAAAKQGefnRH/wHFr4pDCqYTyf2xFsIAJg71MCVgTRQ6LP/wquoaMkzhzAeBAAAAIQGeYGpH/wHFfpTSsg6GbaFpiGWqYkKYE5sACHysJgeHLQAAAClBmmJJqEFomUwIV//+OEAHn3/nn1YbkghO3D2gA+73KBTiAcmYgHEYZAAAAGVBmoVJ4QpSZTAhX/44QAdl9E6lgmhqzhcKiwAOz5CAdk4mw6+TwahJR6jj9SRKT8tl8KqiSn3LZ5rVjpbTi60x+f8IAd3tJ49KDEmjgFUYqEpVdd7br2TnKQWQmNgKcHjktDngDAAAAFFBnqNFNEx/AcW4k5XkCkl8GOlSYdmugtbgAP5bnN6AyTX7Jg4ttR96EE76ait0XEvsRvm3t/xlWXPdOf80TfqUIJOpRw1OEhN/0YG8GEAINcUAAAAYAZ7Eakf/AcV+lNKyDVBY3SBMOva7oa4MAAAAN0GaxkmoQWiZTAhX//44QAdnSlU1D/UCryAZ5dHZE3rs1Lp+9WLWkvVrtbpmAu2I6iRvTBX2eIAAAABXQZrpSeEKUmUwIV/+OEAHc1VwRGGoAP5tMfvtHInB+rk3YiRM4C0c/aRnMsrVWLITA8xi/zgIjSPkPGPz8YJMAWw23l3nVvdgullm3fZCEQmy4vkKvolBAAAAVEGfB0U0TH8BxbiTleQKSOb/QxbGUU9IAH7OGiKa+dbg6XaDYKsEXeO8z32U2o51ACGdNf0+QR/7+wUDKWVaCbQj44tfMod2DFIKCMfsBLGyKnpBQAAAACUBnyhqR/8BxX6U0rIMFsdGkbJwAQv/chlU1A8/J1FpQzJuEfDtAAAAGEGbLEmoQWiZTAhP//3xACDGoyIlIWLNYQAAAB5Bn0pFESx/AcV+lNKyDE2DzBUUtiTABbdXsL02ulAAAAARAZ9rakf/AcTJRlRvBaoIXjUAAABjQZttSahBbJlMCFf//jhADWztmL57QmYrH+uaL1LABzDEcx+GfZxiApONX8S7IIKfj/u2bbvG/W01bodK36iIvuAOj3JAYXAjyfEUKuaaGgVoNRU66AVeFxh2sGccqz+VlXlWAAAANUGbjknhClJlMCFf/jhAB2dFc2om+BcuABsYBPCn7x+PYvbV6Jiv5z0tXu2T/23zFMIh9u8XAAAAZEGbsknhDomUwIT//fEAElYH4wxAAdkTmXo3A7s9XYjx+YnY0fN/tcWTV7XYHgCO3ECDMBO9IFlJNq9TdTZLI0bxutqXaiXHm1hSbo6bJvuK8qyvv8lzXEG8qrNye7mThapObb8AAABpQZ/QRRE8I/8BHbGKREzQYAFnvAv92xepM/K+BBbslLbdvB3ibXXfGDf0Rb4lKnJ2ZEHI0gmWkyzaY8ILqOZGLkN3ZCA163eh5FGtF2XWYVcxuiTaxZ4BJnllXWGO/CWbdhfQc/8/KwHEAAAAIgGf73RH/wHEh9YVM1NCcdiNhCGOQABCSCu87BirLvjJ1IAAAAAhAZ/xakf/AcTJRlRCr6jb+gpdDPYAGozGdgKLbY7xaupBAAAAYEGb80moQWiZTAhP//3xACDGoyIlIWMa8n3ssXlJqk8AJZaZhK8L8j75nHf6JDz+8pbeceSu97W46X9EIvuNWaxVClsrG/azOzQEOCaPH8oVq+LoiRfMUfLpRezyza4/QAAAADBBmhRJ4QpSZTAhP/3xABLObI68o7/qAIQBcTrIpV8DHjSh2R5ppe7ibRHtFa9z69UAAABlQZo1SeEOiZTAhX/+OEANbZjYQhxWzz7fAMrADadQwzyDe+6i93aM2XSl/QahSz+5BfSrTjBYphXrzYqvbbgyv00jPcZDVLqqYDGa68e7YNzzQ/XPjVO6vNKnfWmpC1jSGfwvH6AAAAA8QZpWSeEPJlMCFf/+OEAHk0VOcyab5IASpMRNzb1CU2GuE9QxTTJAz0Yxt8VVG+nSwScfoSP2O5+SP0SNAAAAV0GaeknhDyZTAhX//jhAB5MrNywAQ3kCMs3IDPevFgHb9Rpuwyribw2RyU2YZbkXdpBi2O0NzAsuRm7icGgGX/WvQd3jpPcBN8rW4cyjuAn17IzZIHk/4QAAAFtBnphFETwj/wEeCjnPkUtA5PcLEWw1/gBJOLEfdgok/OKw4O78uDxpKW2kSN5BrtWIbCRtf7BIXMeCRnyttM88CWl2dy0HhTvET8WmTmJmyuOAviNqaqvB8VFhAAAAJAGet3RH/wHEh9YVOFMGFaisRbCACYcIDhx6CIM9ne+sjzl8qwAAACUBnrlqR/8BxMlGVG8dCzrhP4+yiYAITKwmBWH9np4eBcsXZyvgAAAAa0Gau0moQWiZTAhX//44QA1s7aFsAU9tTtYK40iJPwmnn3SpOM4wCaGZjKFc5plZP8wFCVc1bzzUSuakyenc4R42GFAJgCWd0rR/zHfGzmErSyrZLZL+/SaZmEZGS7Jnfo5g4Kuj3VXrTyfYAAAAPEGa3EnhClJlMCFf/jhACj/NG+1LK2rdhHU+AEy1qHPa/pgmPJ2Len+3cY+fzNzdxdoUtuJ/4w34sf0TwQAAAFpBmuBJ4Q6JlMCFf/44QAeRqgGDsA87MkYuIAMpq+tO8smumJBaUXoQPM4eR/u7aDnwsrUjRFghLQB09uBdEwuSaJXo5RChgnlSpr8TITok4afmfjc5irZHkLAAAABcQZ8eRRE8I/8BHbFhFQF38AFqX1f96kHTz4Om/Xj52cFboTwPjPnYUtIHdGYcduQWZzEsnJCNx4LrLictYEy5XlU2baZeTLuxfYk42Vr2sWUlTmZytVIdrE2aRngAAAAfAZ89dEf/AcSH1hU4TyjV1AVb/q34AQkgrwG8yunHEQAAABsBnz9qR/8BxMlGVG8dC1jkKV86wAQ+VhMDv/0AAABkQZsjSahBaJlMCE///fEAE26JtRjCBrjfKAD38ZA3usZDRKRx1cli8Xsz21Iu4LoQEGLv8y3H893rBKSfhRukdjnpFjeu/S3LPFW4Q4kYgYwAfJ1gQijRY9Uu4KyON183BG/rtQAAAFNBn0FFESx/AcXu3bqmIU59vurfChD82QATthD3/da3gfISA36LLd9NgMN54qzmT+/pXkFQwRVgwdKX6bGogI1sF4K22s++DzSvMpevqdc/AWjTYAAAAB4Bn2JqR/8BxX6U0rIOkw7LVoWn5NTYAEPlWaCTKkAAAAAzQZtkSahBbJlMCFf//jhAB79FTnNqWfBADXMJ64YiA8fRkIwbFQDS2udbuReQfqVTdzPhAAAAbkGbhUnhClJlMCFf/jhADW2Y2WmAIDx2Rj4/nmfk+JnJ51ZiGmIm6feYS2Z3aPN/ovTt25kEeGzdTYOcFCyn2ELYrmWf1hqweLh1+MVZesK4XDfGETszWkzGkeOF/a00uMQa4EyZmAAGqSeYHDbAAAAANkGbpknhDomUwIX//oywAgKyo/Ic4h1pACDmo01x6XYEp6eMsUpvQ9J+bodPdcYRHXHBW9VoeQAAAGRBm8pJ4Q8mUwIX//6MsAIBSuqkABcr+yyoMfrzVRdwJP7yGAq7QVbIzDt9OxrQdDkSF05FDLr2XQqO6zxpUrPYKTbZLjjXDpgBEku/gWy43svwICSpM+7S2c2NopW3gp0RBx5BAAAAT0Gf6EURPCP/AR4KOc+RS0ClkH3/cABMudlKzD4tVmvYRpPx2k+gtPaGAlTRPmGWRKRqNuHmTL4NnuivqPueUky/XFs2h0Vi8f7Ajah01MoAAAAmAZ4HdEf/AcSH1hU4V8VEFQTcq14cAAbPWgLFSbuSWjQRB/0jpLEAAAAfAZ4Jakf/AcTJRlRvVhAuC8zJ5aP8IAITKwmBokoigQAAAG9Bmg5JqEFomUwIV//+OEAHy1VpPcE9NQAOxd6eJSL/LlWRMFgrD8KCporppwFOVv5j6MkxpcRwY1O2C8UZA3Hsn7kKQwtglrjj3e1nkiKKFRVkUdwWkfevxm2C5fLk8OIlxXcvVa6PxugPTEI+LKAAAABLQZ4sRREsI/8BHimzwcnw1S7+/iYqEP4APyXqVm1dZ3Qk7HcVGftadaazq5ENSUWw0bkrqr1ipfPRCfQk0fzTvvumsVreM+k/WI5RAAAAHgGeS3RH/wHEh9YVOFiQfJHOrs8zTVhAAh8rCYHeugAAAB0Bnk1qR/8BxMlGVG9QaUUnFksABs9aAsWc1OJ6MQAAAGFBmlJJqEFsmUwIT//98QATZGM97i/PABwNkuiYlBKbEz4D/8n6FIfF6zAFlh64sLXnGh/RRMxj/nKERzZ7Co8r1Gh4am+4VyRxMFOMjJzqRKXJelC5dabVrCkeaS3NxuhbAAAAYEGecEUVLCP/AR4ps8HJ8MshifR5XQcG5PyYYa/UAEO2sG2aIY+V4B2769BC/m/3nbXmPY/a6hZW0/GmBi+hII/wZUzJVxN1K4sjFSKFbXZsja+VZpK11ZB1ifDREkKkYwAAACEBno90R/8BxIfWFThYyoxPAtvEsABs1Pu87AMEjp4bqNoAAAAgAZ6Rakf/AcTJRlRvWGqY3/ItLAAQQIzsBRkKrxIf3zEAAABcQZqTSahBbJlMCE///fEAIMajIiUhYyDqbn+Y8dAAEytMwleF+R98zjv9Eh5/eUtvOPJXe9rcdL+iEX3GrNYqhS2Vi0UzOzqocE0dIiWpeTe5SL6mR5jXgYznNlYAAAAnQZq0SeEKUmUwIT/98QAT2BVptuR/j6+6ADizp9JLCDOQ+sAWkwlBAAAAZEGa1UnhDomUwIV//jhADW2Y2EKHkAbFuAuWjQYBbVjbaMY0tE+eTjMM2XSl/QahSz+5Be7PTjBYphXrzYqvbbgyv00jPcZDVLq1E1S3tpYgMpQJjdCNVrSFZq51TEP2TMVvEVMAAAA0QZr2SeEPJlMCFf/+OEAH60U1lJW6QUALXAJWkn//jrCGdhVZEMnbrDCSt0nEONRLkI8exQAAAFZBmxpJ4Q8mUwIT//3xABPXvCb4ATLhFBikJXnvXiwDUU2aHYZVxN4bGbcebd/SLu0eXsnkQKfL5zLoZkaIBlTX6MPb3+Biq+RV2TaQgNeTiKOUEOb0gQAAAFxBnzhFETwj/wEeCjnPkUtBVeRItHRuADwkET92CiT84rDg7vy4PGkpbaRI3kGu1YhsJHh/nEegXNJGfK20zzwJaXUs/SgZq4aBt535mDOg1TETMBfEcmLxubjx3wAAACoBn1d0R/8BxIfWFThYSP9Iol8EqAAmzvUwLdi9ooK1U8Qqvx7uJxo7mIEAAAAmAZ9Zakf/AcTJRlRvVTmq1KUb+WfNCABD5WEwNmJNTJJv4zP/9jEAAABmQZtbSahBaJlMCFf//jhADWztpW4AJWIxrv8S0aM2qQGoflxMxpWorOZH3/D/6nfupLvu6WsZFP0zTltD43lYGdw6EnUZhsmT4EJWllWyWyX9+uhn1cwHGXld+jdmvPCOLvhlWg+yAAAAOkGbfEnhClJlMCFf/jhAB+tFc4etYFy4AJUajNPMQpLOaq9oHn3C0wmsP87DPLl+lFtozmQt5dL7vkEAAABXQZufSeEOiZTAhX/+OEAH8JFRY5eSAC9+7lKHJMiz41OpFB7ABe8TJC43kYV/FL0YbVlcSJF//n5sA6pRKc99td33YvxXWgTU+srAcBQVMl2Xm6hlm6EIAAAAMkGfvUURPH8BxS1AFpEt4AbUuX/vQI4V05g0htOFy8FtakAPMhe+ZSTB0q5fCVw3PV9wAAAAPwGf3mpH/wHFfpTSsg9qneUZS35+4D0ADkDCjTo9R2C5/x+JIW0XJ8ENHTLMSG8jnsv29plDrjXiMvw00a31wQAAAD1Bm8BJqEFomUwIX//+jLACESXHxDHdrXS7fgAnHFLSxADf4zccp/WmFhFJ1z+X7X2GFOePVGkkRW0jXvKfAAAAXUGb5EnhClJlMCF//oywAhALHetjAA6wItZci/ekOUVUIk21lPhb4HTJ06ZOKAFFDMvZjfdzPPuP6NpeQ+Pg32qGpz13mpYw7brOxvWV0ugdd3iYkdT6kXnwWX1HEQAAAFtBngJFNEwj/wEeCjnPkUtB/ie79gAJlktOa1uojVHuEcbyjPnZ94iTUbeBfzYJq4RgJMF0raT57hf/8flGbYMWyAJtX4SGlohyyjdKSEnFKoPkv2HrCnSQE5n4AAAAHwGeIXRH/wHEh9YVOFWvKr5RFnNmHMVAAh8qzQRx9PgAAAAkAZ4jakf/AcTJRlRvVSucrtZp16gAQ+VZoJEm5j3Btoh8r4/xAAAAWUGaKEmoQWiZTAhX//44QAf3f+kYvEJABKYBoyzavlsRbd+ctjihmAUmJ0FSBaKeh2KkrropVjksdyDv/Iq53cTu6LWtVN7GPnNAm5iLvkjiqstNZZWErMEiAAAAVEGeRkURLCP/AR4ps8HJ8NbHYAC22BKJnOT18syhgpCr4lkCfJ8jdnJSr7RqNSI4rxOYB9Y3e9dLZxgmYVb1d5fWJt+++hrun+yhZNMkwev4n/F8EAAAACcBnmV0R/8BxIfWFThYR5cNolcy3ygAJxerzZQYjAP+O/c/pJJze3EAAAAfAZ5nakf/AcTJRlRvVSwn1KXOFLy/S9gAbPWXRLN24AAAAGlBmmtJqEFsmUwIV//+OEAHvwuysL4ANp8lPtCPiy1xzyWVhLXKUFLkhEsJ7wVG8aglRz5zOf8tMM8vja5uY+FMDS4s1pJ+URmrY59wWGBOOJuwqQzPe1+r560vdJpVTEVvjtwsUXZ9dcsAAABDQZ6JRRUsfwHF7t26piFLbvshhRwALUSeje27t/aq/oaqZ1v/YKfAzoqOAHJ9fQm2bDwvu3Emba9v/twjrhVEVeo33QAAACQBnqpqR/8BxX6U0rIP2YqbNZITgAhpJ2idA6XsJhKZYuSd2dgAAAA7QZqsSahBbJlMCF///oywAgAXwFAXUABevA5pYcnto3tKFNT+kp/7X0JfbxZb3630YZOLu2gmZxNEnEEAAABQQZrQSeEKUmUwIV/+OEAHxzoGvoI1gAZn4XhPBZQaxOWvUd55nZxCbTxIx7cO9By8Po0M5mGB9fHp+W2bffp7VZIkIb6oYk5XzDmWvCMmhaAAAABPQZ7uRTRMI/8BHgo5z5FLQHNCLI4RgcccfTwNsAEN0LBKtVaY8Si7ZiMun9Xkt/7A+yw+aUYIs43V5ap5NBYRRVaCx5PsIPF8nC48OiPUyQAAAB4Bnw10R/8BxIfWFThTZ757a4hJACDYv3WkGL1Vy6kAAAAhAZ8Pakf/AcTJRlRvNwECrGDkk8mABrxMMNltakJ7SZLkAAAAbkGbE0moQWiZTAhX//44QAfLVXBnB0RQAQiZQ9dHWrk06AHE8TEkEcHv8XHY0uZYe5ffG9IH+EotyFg9RIayMDX8m0hZb70raAIBtWLJQuh7bqWqbK4gbQwebl3DkKw3XJl6SP4lNeVwLpFV5PqAAAAAREGfMUURLH8Bxe7duqYhYiWSwgAAJRgulcC87kEn6B8Iq9UYteryforyUJYgTcEpU6Y5VJ60yv3u43Ht0H4tCZB2L9Z7AAAAHQGfUmpH/wHFfpTSsg548a3NN6H1AA2etAWK3gD3AAAANkGbVEmoQWyZTAhX//44QAe/Si5zG67vfcIAbWBhYwI0B+D0maRbCKUsiadLWBHuORWveD9e5QAAAHRBm3VJ4QpSZTAhf/6MsAN5ehQmT2gA/0XBPZazdDB6L9Jvb1CLivY06jWy/26GFCBnuqogWHkT/FaosVsAhmE3XB/tKDFI3iDs1E1v46vp82RuXuTEconLsk7Q4cOciz8iXfAXYLkgMEYGWDZj3xjg141ZwAAAAGhBm5lJ4Q6JlMCFf/44QAfLf+ctgJ2aAA+CabOB7dwh/VP+MsHB3uebu9/ZujWrHpk1XvnBIMG8iwBT0QLpTtheAB42ledW2WUni84uV1de8TCAdxqovj9NbZ7Q+GcdPmme1f6CSp5PqQAAAFBBn7dFETwj/wEeKbPByfDNWg9Byk+uaEACWoweYERdv055L3QcRuooRVX34bMbPbHpiDWu7cWVsbXbdnt0C9L89e+2ZmFgjEmRRzznMLxzKQAAACUBn9Z0R/8Bxa+KQwqnE+XXqxpgAmV6vNlBiMBCtTSkcfq/kELBAAAAHgGf2GpH/wHFfpTSsg6RXjxsUHBEwzYAEPlYTA4BQQAAAG1Bm9tJqEFomUwU8K/+OEANbO2YvntCZpAgg689wJyMABD8+Ss75JwMaUOhqSiVVbMGiq+RjCLtjG39k0fWWD71UrF8N99WDNp68XAmgzUIhnOVXFSQGoXdSPR7Fdv2SKxDBB968Aa9yiUoij7wAAAAIAGf+mpH/wHFfpTSsg5gioO+YqeqqFoAG0EiCJyTm2ipAAAAYEGb/UnhClJlMFLC//6MsAN5VTkTACbvPjcIujk2GMjOLi9B2eKmthvZB3zSfkR19zXt1zGjD2LB8lejpTOqgOMo7M/oeXZBQ+muAhq2iV4QX4qo6qcxkMBOg/QRO3W73wAAAB4BnhxqR/8BxX6U0rIOhqMg7nN/Ajf4AIfKwmB31IAAAAB2QZoBSeEOiZTAhf/+jLAB9eE75UAH1PbcVQQVt7VwT/+O4fyaA92pxVWNRyiMyHhr1ZGwbT8UVI5Cc13L6hBpJQE2TY5He81bVsvv4t9JsJ19+yX65pku37eEkVjRx7kiXx+3P7e+TQ/X2suctUTSbxRMIY3hEgAAAFNBnj9FFTwj/wEeKbPByfDMQfMoyu4DIrdjwAbDdgpSQteJb+ntd94iE6/m1KzErDGBmE1ePy81Sr0UTYC2b9IakNsujJB1eCgWB5N6MFbrkv7kQQAAAB8Bnl50R/8Bxa+KQwqoBOAmk4tKFmywAGy/rYf7uvNhAAAAHgGeQGpH/wHFfpTSsg6Oqv4BMAtX2VQANnrQFi31IQAAAFtBmkVJqEFomUwIV//+OEAHn1VwNfUIATLH95+w6G3jcoF0VTf2002fAvR8D/sXQkqdtJqMv72w8vkp7BfF9pLD7DI1o2a6xwN1BHKc3NN4yi9HhbGQseDgz6JGAAAAVkGeY0URLCP/AR4ps8HJ8MYXPJHXAB9BJ76O5I+j8CpiGLDox0nu1apTFlbCSovj3+tk4XmBWwh71jW9k18kGqaQMGebVBhCTm/GeHphX33EHPzJ7gXAAAAAIwGegnRH/wHFr4pDCp6UAQpxUP6gAQ+VhMDnl7QtaeGf/gXBAAAAJQGehGpH/wHFfpTSsg1Gxfjgcu2BEACGeSRyQJCEnUz1HmK9NoAAAABiQZqJSahBbJlMCE///fEAEu6Jq6TpiaLhXEgAWfaRD9VETU/Emhh1iElRd5LG2S+t22sszLbjFw0Qnj8xGbzp9FHNUYyAQcqPMEOpJQUwsSnDOdOhsA6390AEkw2h5FiNYjAAAABDQZ6nRRUsI/8BHimzwcnwx7yeOT/9hCAAyeHR1OTgXasSHBB3UtUhV6sHWx3ezGbAhLjBXdDEHocPwdx7jSfbXNNmrwAAAB0BnsZ0R/8Bxa+KQwqek+XXo7dcSZoAA2etAWLAaAAAAB4BnshqR/8BxX6U0rINCo/SfIeSdY0SQAhMrCYGx8EAAAA1QZrKSahBbJlMCE///fEAEu6JrN7k8i36AFkfsKpiTeni+W0r8Z2QZChykeS2eVCv0pg8eVEAAABmQZrrSeEKUmUwIV/+OEANbZjYQhxWzzvzdSdfAPPIAIgxen2hHxZaxCMgYKUpVFhlnJYeTDsCUTUMhSA2Zoq9V1Dsjlnll+99uAlcs689Xnsg+ZMw5Owl2jraIcTxpKdokGkv3mqgAAAAL0GbDEnhDomUwIV//jhAB2dKWeOGoAIb1BzLTk805eevQjaBnqa9WUL1bZDQ3olBAAAAUkGbMEnhDyZTAhX//jhAB286BraKNYAIRnUll/FXPasTdys7SE5zI4GyVS+KTWiqxMpSyrwSgRTTRcBFRzPJ8qd7+iN6DMslORPFIDg3VpokdEoAAABNQZ9ORRE8I/8BHgo5z5FLPl20PA4SbO4TgWmMAIPoWPARptdNJiFN/w9irDKg6c+7dnXSLvrkKZe9z0c+Q4KjIUG+Ht95i/sFdagAyIEAAAAdAZ9tdEf/AcSH1hU4Sufd/OBYACGYv3W3RP1i+bUAAAAcAZ9vakf/AcTJRlRvBQIYtXs0uZVAAh8qzQSaagAAAB9Bm3NJqEFomUwIT//98QASU1+sY3gALo2upkPdl6SgAAAAEkGfkUURLH8Bxe7duqYhKhd1OwAAABwBn7JqR/8BxX6U0rIMFpTi4SX5GqACHyrNBG4QAAAAKkGbtEmoQWyZTAhP//3xABJObQXRG4AAtvXb+hhi2VNEV9LAiQ9UC4TkoQAAAFBBm9VJ4QpSZTAhP/3xACDI6/nNjhUJ1QJX1SI7MzMOIAGxX3Gxe6RWwa+pwsG4ra6fUvrZB7O1H+jQJYXlah9d8OeCa/A9fDtTHBvR6adqrAAAACdBm/ZJ4Q6JlMCE//3xABJObQXREJABdBVGeLouH2BOlen+Cna3478AAABkQZoXSeEPJlMCE//98QAgyOv5zY4VCd5JgJ5lgBArx1t+Y8HgHVh3rQnUtfGmpKzuO3ef/U1AXnlCyjpc/VqPeG1dH1nC7kp4jF7JrjLtoGt5nUojpHuWzf9kiOvq0mVQMvlCvQAAADBBmjhJ4Q8mUwIV//44QAdnRXsqE2IAOKunfkaxyt9FzacbSmLeVpw4qMWJ6bEtiYEAAABXQZpZSeEPJlMCFf/+OEANbZjYQhxWzzuwuueyoAS22mF46QQFQu7XzFhapFLR7/X0W0Jom5Vi6UObCyVOnTXYPWP0ozpCiNHMPShiCSyrl3dOE4OAJ2qhAAAKAWWIhAA3//728P4FNlYEUJcRZPwXn5VAwXm+5kWTul1n1iiUjNKxR1cZJuvrOF76NkEccJfEfg4SrWWCOO5jTEgWRRyQtm87nN5QW8QsMDSemc05Bh/zi5GH61PxSf6OpzGYx/CJTWb4hUdKFjtcm9d/vyFyJV0QNE1E9Y/EX1XxVdGDy0V5K/uA703s7eyAqz2zBhBmWxy/U+a8QQ54RQ696pH89oOT94xplcDAnqNO5f9Xhr2cjo+fdysMc9TVhJB+jt8QXV2Y8O+FZHJ7cFBijxgKtCkQCiJx5BoSaqclUK4CI/jqO1tzDns1xNVUmGV9HLk9pcRZ6eD9O0cotcnrGwEBRvwuaQwoMyKky6UYrhRLKf2mSBvJMQAeqWHsTs9c5ZeY055UceC8W66mUpRrXpd4eV6kla8dQ9FuWimZz4BcH0xemSSMuSwudgUAEKKs/iaNEfnmgZ20XalwGjPY7VP/dJ1sJ+UhvKCzvXjNstDwEFfNgh7hvNhGnMX/vf3176AA+68wDq7rx56cl0C0+IobLuOqL/7LtB8GoavgVdyGkap0HrkkTmhHfI5z531/cxLnDTMy4LTc4Qt/peMv8t1HlGT5K/KZjJo4gLNgKSKvX57924Q7pkBv5rHLmV2RwhSKZSXPieMTktfM84dGAY1jcec2xDJEpp2PANHQ3kStmj18G9fmPg2WifkC8t3dPhPwpcSk0ZzgmXtzWkXmaF8BSaUX94VGSs+NlO2GPgoPRF5t14L/g8szhSAphmNDZ7h9yqeJnY6nagNYiiX8ObZyFP/ZRle9kcti+ts8Yu5eBQbc/BTKNOdXQ0lIbViH+k4yLdRD85DfxNfdZxZYbNSjb/zRO47F5NVviBHTB2Auj9Fz7TI5fzHPlto7/3xfLFqlOL0rRIfM6CBic/QbmhFpW7voOuIE1LoKoLYDFJm2IPu84IGiCrjlaPNVfpGv44Mk3eMe461Vc2MOyFC7NkcxqE0nhdoEv65DOqr7XW8cuoUvb+Nmzpy55upahWxhWA5jsOtOFWF8zYL2tFGW3eixSwVDP1OQ9ZdvqCFr97qM3O2Ffx1ZRd2LWvcWK3SVNA7cMgEDW02Ew7T61AJXiwq+2lHQ9PqG2AMi0MlK77oo90kggeu9k8IpU+0I7UKusZwTY0gPstSBXuiCoKo/zscCDwTpOpWvLynkdq9wQ2wpJu+66SEsaK/DLmXU+oLjkk/VYWxEh7tcSj40IC5rLXGCqOzppbPBI8blDAxAPxWhRkCDovI1RsgeBD4ajWlEqIaYEdvFPgRLkzXNgxiGxC6pMOzE8E1BiChGeMg1DOwNAX3hOOoe4kITklNSTOYFUVPx5d3fA+JkyaVs5SdvXPMB5zQEzFLkXnNQvKB0eEoIDvavnI4Uc2PAejNyNaiyTLm3T0yLdfYFjjeZIlscD90hfh9R3Ft0egngiupKFXIj68QYiUu++C7GSBYxi73ymY7BiIxZ7IJKE6zIqku236NOZqPmmoQO8LXWGfWqzkoofMRQThfd6by8OZpEGjR3BJA5ZzD9wAvm8kbCyu0sHGKzRHXb7no6H/VSilWv/wk7q0C0dxS2J05raUkmY7S6IQMbcHGYu4VTLLhQpfzj/W8Vkqx5TrUzTRb7GwHtp0wZaf9LlPDYRjvvGZaUK251r9CY7oJUUtAkjSbnTREQ3AsPs8Eylll2PumTpSmwJkenRoJXcgVupfyvO6IFwsl+Q/9zetoonyj4O7Mwai6pyQxooYwLIvNxUIIl1p6IgMhiKb63KGxzYdrL1q+kOOL5L1VqtQUrYn+YZ01NkycHnG/7QJ7SSaH6D8TAzqlAO/1y+ud4S+/GMdO4X3ModgSrh6OtsC8Mkux+wdW8uaT7crBnUPzeh0PgFQIGN3XGc6VfRAMWLOcJ1G/K5ZeCepO9VejyqcVvtANq6Ow3tdq2HTLqWZUaQnZOSDsV+WizKMRCCPCtOFuR1gT3Dlsm4FZRJq8uyJIPyoX0uh5CIGiL+HLoGv5GJlvS+qRAH+oPDcPNf2q34V6YlabNZvcjjmvt99NY9iuUalOrJdEBo+NtY5+XC+3pdOJ7F8MsKKJsEWiJ6q12wo4tOkIFY63qYAY/9dO/MpA6IBLYmoEeL9hsjQhyFJ0XucIvb/nLBiAjgrTkuz4A8oAonwKBclkbXnMLCl+CNzGLNwbia4TsrOvpH45eXu43x0qtgbfS2JJU60dl5rbZCejuYi7tS9DdiIs1HxYD2eSTHIfLRY6HHdOS/9ypQv/oHl/3EWZfARCddgD5S2rOEylHgSbtjDwhbJ8lZmZDpxk0TThDkHCOULh1c85woP9ka475KBAsNWhwqVIXkbjvlXouTIAv76mM4B/jbmVJKXOOxViWpL8H7J6bgJZs7yaRF0MsNVEcwePDbIX9hB+e9ZHYej1ld9PorFE9Vmi5PisQdzE+WKJ+cyCGgB+cRS8A9LSqZHBZZw4y3JpfLNHJDZt4dNhue+rKxaaXtcbcL7yW8gFg7TVuD6krsjvngV+5dZpsQcdEABR+evz0jqoovM500C/0HVwCuGJYTuYR/DggjDHLSqHY26IBUfXdP450oK7/M38IUY67UzzL4bJu7hqMrqaGaNhurHXdUwYB2uQ06NeVW2XNgD9TQJdN7Wia/H/yosTFq2uOmgNosDOXWh2I4G8VLIXzrdiDRv4XLeBjT1N2W1vzKt2gNgSgK2NaOBkFwJPsEjLJNzaFQ4dcoSTrIcOBDPI+0/aGowFbQC9aHe3YOZGBUk9cEjX36OaMXtUa+pJW0e1FFjNKmhvqGgiexSHsHUxiucm1/ftFg/JOri/+yjGU4/dlPVKB0dvadLRO/uxzxEBQ+84QGttC67TPepoKaeAMFYnH39AWzWc1+C2FEFZhNazVPBigNiwqMXaWkGHqW585A5UC3B6whshoyWz6JS5ADUj+posalahV2MdLebHpuwlVBN+0mTtOsiqJUb32AId8ikVtIT83qBookvxrK48LMyFaFiZlvyW4kibJfdVsFARTpxao3+k5zUW7nCBLzNlNjpY+fJ5yy1gVbXe5o9nbR4KONgMPTQKtOnsaajKqvyRIpMRuUj5TBxjXnFfEWuryWXasYhcQyf/zqOLHMrqVUmgUc1BQBx4gkVZgH0461t9nPAuXGbE7cRSx/hpJ7qGXxbN3AF2F5VZFstOSNeS2onCZ5pc9Syr7BZkSVmRoBzvn8aPgJH0YD61t5anMrYaRfeJ4JGaC9UsyANhvOyfp81MLhgpzv3jKh/MZas7nQOVzBeqMt8GwbHFuqaCwlEem3P3p8n6bDTSYjSY9AJru9YA0ys3byzmqVfPU8JlsBGXfxRwN1MU83gA7OxWIKmVm++Ys1asQ9J4D1p+MFLfUTHoP4TYLI6GVdNrqm7gUqjhOAAAAe0GaI2xCv/4P8LgAg81EmSCFjACQStZD8HTV9v28spbKZxuJXArAkhCcd5CWPdLsNYluyAh4ygkDxLJiaZcPN+yaTWh/pd8UYZ6wE/W73u7cLLZfYp7FhlFJriYYs+SkTjyQsXfYsYqkhjx5bpLsQmBCrMVNmzf8oUQuCQAAAGdBnkF4j/8DsZK1LyXToa/ohngANStE6YJ6UFj3Oh7l9ad5Thn1uSn7LGdvz4z3vBf2DlrPM9vmz536e83gsnTsFuW038fYoO3pcDdXIfsChGkOAytsk7EcNzlSTIRLZ8FMs5lvnHKBAAAAKAGeYmpH/wHFfpTSsExFif62YI9MMAD8K15soMRfhH0NAsvd1tlO7owAAAB9QZplSahBaJlMFPCf/fEAQn7pUALaPCrpOlI7a/m3+uFyvslFhgTd4UGJR8Pc5DjDmwPw6uwJ+P4W8JtbwrnDRpcgVZNEv9Qj0+h7AX+P1d0BzjbMsM6QWycMucxbS8FhaTbJVuLppgtWU//5eTTPz3sxCFN4VqGxLP7dVMAAAAAnAZ6Eakf/AcV5L+9LA+Gub4c14Ub9MAEJlWaCK9Jkca2vxWLXfTaBAAAAN0GahknhClJlMCE//fEAQnzzc0McjSByra4CAEpP1Jm7ntG2kKbWZiyEJh0yhVS/UHxA34/6kEEAAABoQZqnSeEOiZTAhX/+OEANbZoRM0mWz/ktaR4RgSQ5yxEAAnKJYlXQmOMxETrLwwe8nZfFGsZhjqWnq2AhtVXd3nxFOiK2ldpfdisVRWLnDT1rRyxtpex97EdJH1T/Ig0r4XGeAa9+8EEAAABkQZrJSeEPJlMFETwr//44QA1s8TEEmrKqyz8YQJpBkYAQm3CE4Y8DUF2MwIimmHwq7fZKzqPH/YEOVJWUnDBaW0xdh+4FLG2xR1jb2iZHBcbXVC81xx1M4S/9A3Ci/SbELcH2agAAACQBnuhqR/8BxX6U0rINRpBTNgsABsT9o2UGIwEix+jilpuHrDAAAAA4QZrqSeEPJlMCFf/+OEAHk0Vzh61gXLgAlSYiVFep38kwT/zxQh/fSKlGFa8pPCRAJOcD9AjD4t8AAABgQZsNSeEPJlMCE//98QAS2PG43RKJ8ABKqCEDVztCbrzDLkMae7B8XmCinRxrLdtHS/E7Te15rZ+6Ttt9Mq+x9sOaW+eYC2MWTQ5Df5A1LfNtT6Fojz5y6HyyDAfTv11QAAAAR0GfK0URPH8BxbiTleQH4XHjFCNA6f2SPfI446KACaueeFXbXD1ndJYDCZn6y+nphczRMv/I05Md0eCkS8jvCE4/zpO/ldxjAAAAIAGfTGpH/wHFfpTSr7DqmDO95oroT8cAITKs0Ef2anN9AAAAOkGbTkmoQWiZTAhX//44QAeTRXnjhqAC1bR2M/gUsgnHN1JZhcRNHLNnceQDbq53pylnkXlqDsL9tUAAAABkQZtvSeEKUmUwIV/+OEANbZjYQhxWz0M2HqgRFOV1YAGq0l0ho4ASHKVfFirJx/71+1sWmRgipIgUzHZ/JpIzbdXeY8o5NXAObVmHJJqT9e5b+QiMJePr41rVLKknN6eFZ4/mzQAAAG1Bm5NJ4Q6JlMCE//3xABNOHCPgBtln2Yvd0MiDgOcsHEHtuMLpKV01Fd2XP3idU7/BGfXHJtwHVVWPYMzymQ+lssnY4vg7UEvtnkOWHGWseijtsEdosl5RHz2cbw675+0+CfeVb4zZhxPnwcbzAAAAWkGfsUURPCP/AR4ps8HJ4bDTQfne4QABAC4bTY1U7YczpCwjcirYWRrQ04hnHaCEOA5lFxx4MJHsmyRpeY3u3Q9ZUBD8JNNv/2L5oUE01y2A7KAZI4JqekD52QAAACIBn9B0R/8Bxa+KQv39hR+XDRfioQAS8ZuyYJMWoZNjEV1lAAAAKAGf0mpH/wHFfpTSr7DeivPLzWHAAH1KqOMTLzJIho3Sb6pFju7ibmQAAAA+QZvUSahBaJlMCE///fEAE05sjrrsLLzO4AW3r+tmWGP5yMAph1FMbZU/w63rLLH1FVd+TnnYWDdjfz++7kEAAABnQZv1SeEKUmUwIT/98QAgyOv5zY4VChD+NtqAC1P0L3snt9j9dcnNoOzh1sRkRbQhHxotczuqegS95Rt2b0c8PIkJi/Vnhve/ruU1gNttZpljtAgo8jUS05BUjEYlcNzEKSAn/aJw2wAAACRBmhZJ4Q6JlMCE//3xABNaRweFOITUMgAXP0uYj2iufxuRr6gAAABlQZo3SeEPJlMCE//98QAgyOv5zY4VChmas8u1+lIAH7qEIR56ly8NGtQMH6JiMfX4/yACYt0DMqNvzusj2zl6/r3+BfQaRbDWKiN9cOJ6BGFlNC3bxWP+t88bWMxA8+/hHAfot+8AAAAvQZpYSeEPJlMCE//98QATSYXmcTmei3aonABKkfCWzbstZKZIbVafN9HnI8HxCLUAAABvQZp5SeEPJlMCE//98QAgyOv5zY4VChhViwE5WOoAG1GUPSVsidSqpx4NwXSA7hkguXoxaf3bTR/TZceUcVn0p4d9QunanJFp3eG7qRLjDB5i/4K1Sz/9mqdUTnI2JX2U1uKF5hpoXeWrd4anDZWAAAAAL0GamknhDyZTAhP//fEAE05s7z7pfAFzgBbhWujjABnvAHDOALw26gdiPV6elwzhAAAAUUGau0nhDyZTAhP//fEAIMjr+c2OFQoNAlfVIjszmRrACD6dk4LkYrYIPEwS6jddsTVlyNoDyN38kadW54U2d82IcPaqNYD2IuDrYRt75a5LwAAAAChBmtxJ4Q8mUwIT//3xABNObQXRHVAAJvzzGSycSe/BwRuCdMOIZOYtAAAAYkGa/UnhDyZTAhP//fEAIMjr+c2OFQoZmrmtHzGACEZHWExQIT1XTf9iIxM4n3aWFUSuJUxhsua2sxRIwKsD8/VB0ORxgD5BQqKWAS3/ne4ZdsYn0OsCUY4mhLJy6jAt9jfPAAAAM0GbHknhDyZTAhX//jhAB/d/5sItyQ1s92HIAW4TKonmDt1N4+iL9PHm8eobdUIHZhDEqQAAAFtBmz9J4Q8mUwIV//44QA1tmNnxEANCPjJGK4wRKWhcyrmJ7LETdMed5sPtMAkx+DZ4USjXzHayrdLOgAam0buduqycUeQ3KoU0BwGXbEOUo7PcSzX2dH32p1lZAAAAZkGbQ0nhDyZTAhX//jhACj+/vBhkOrCWtcALXABOz+XSkD7GPuNjMDGmXRFOuPsUpsf2BI6qzIossBBSMQO408Vnz0IKQhO8JeSHid/AYjrbw47tW5XJlFk6jh3L52OCLOXIWB6uyAAAAE9Bn2FFETwj/wEeKbPByecFA68G6IYAFus/CSuIuXBJSpNVd5SA1kxzyON5jAxtVisLfjIQFP+sadpYZX7xcKXPlh7cBqX1Ib4pupHCRoWCAAAAJQGfgHRH/wHFr4pC/dR8tSS6ASPlwAIO6FgDd1DS/PzXtY4B59EAAAAqAZ+Cakf/AcV+lNKxSp370WjofdhABMr1ebKDEX4cyt1MpyfNJ77cuNaAAAAAb0GbhUmoQWiZTBTwn/3xACDGoyIlIWMnE8wZKcAKqdrfxW8r0trZoSPUP3dTKHbuUWF67jA18ye1qfy6Q1n0RhRUnjygRy0ZLBDeq5LItbQl+k4YR3uO5pbKzLPHJ7rUiqrqwdvPh6Ivo70eBrZsgAAAACUBn6RqR/8BxX6U0rFnaAcou9/R5pwgAhMqzQRx4iHbegWbP7pNAAAANUGbpknhClJlMCFf/jhAB+8/33qmdFpySAFuF0nfzvTiYqo7h0G8LgpQHbV6/yjct1HSf9exAAAAaEGbx0nhDomUwIV//jhADW2Y2EInL5cSi0Fz3w2ysYAH5kPFA2ItoXiJ0Gbt6nwQJnbEme1Jus19w0nkulrafMG4Uu/9GkLh6v2VHYvcihFWPEIz5kCuH6yWuwKw3v5/zx1YkXL3nwPhAAAAXEGb60nhDyZTAhP//fEAE9NLOFXFPtAA2Rhk/C/VrNuHC6d61gYapL1qrEbEMjJRqiemqKRzzvU32QURsmk0/RE6ElySY1dfrpKla295PAmRSue/HXb3Z/D1f+hCAAAAFUGeCUURPCP/AR4ps8HJ8NUjpmmHVwAAACQBnih0R/8Bxa+KQwqwwRgDOLAAbE/aNlBiMBItOMeI0HPD1DkAAABCAZ4qakf/AcV+lNKyD8bS2i5UAAOZaPdh5pWa11lTnTVx/BDd7DSDoTJwEfdN6Loa6JJYXQxN+i7U58MLxVDpfzUOAAAAK0GaLEmoQWiZTAhX//44QAgp+NqFLrk1AG5jgKFPD9H4G55qUvHIod5/XvAAAABoQZpNSeEKUmUwIV/+OEANbZjYQhxWi6G3CzW7S4AQp5Ukk2LT+fbej0RWa/Vb9go+x5oHMW6Gy6yc+N1sm1WMGvhBTTYQTCuxG3kxbuNHK5exLIFkwBjS+ovQ4hw0f7eQBNk+MrKw5rkAAABlQZpxSeEOiZTAhX/+OEAH7TzJuVogBNXN954L78OvCsOTW4KvDfvapC4PI9qtcxBNw4qWP1y50ofFvkj0to0c6w/W8D5DErH+rwwv7W0e4azTxp4jjSu/h9/ZR39kgbb5Kl7Fk9IAAABaQZ6PRRE8I/8BHimzwcnw1F0mmJgAPxG8bfa8L85MqSmoi5jN88v4faK38t3PGgXLFfpDE6iPWix/4r/NU93GCV8/sSzqtWJl38SMl8t+XRr19cO2z6uHj5n5AAAAHgGernRH/wHFr4pDCrDETaDvmVFgLcQAIfKwmB6VXQAAACcBnrBqR/8BxX6U0rIPyS8SvToVkHF3fEACHysL3rPUrWGSEyfb4bYAAAB4QZqzSahBaJlMFPCf/fEAIMajIiUhYyYAEcgayAB+KnGHSFjvRrcEl9ifB2/gTjU87oVeHW2mFYuj3RZ2wLB4IzPX+U9tYiEPNXQrnXePCBO4+vSPOzfWh6KDlnK3Z5YfLNX0yc91zjr4vo1/sPEb/mO9m98Zb7SBAAAAKgGe0mpH/wHFfpTSsg/x8dlgQhnFUQAJxogwo0debkonBjC2VXvuY8VXQAAAACVBmtRJ4QpSZTAhX/44QAf3f+bC7ckNVj6sqfUAGz7VdipBVFErAAAAbUGa9UnhDomUwIV//jhADW2Y2EIcVs9DM3dXutPaUACZXUlyylscjtf5ijmXubjltL35uQbqG9n0nDJfwwnJsIhzwdEy3CntNooAtTIaig21/77Qgc3U7uDx/fNPx0xbGTWktRu3FqBSJlvtBHkAAAAoQZsWSeEPJlMCF//+jLACABe/A4exDcusAC+VQiNkTHp2dzBgVKAfjgAAAHxBmzpJ4Q8mUwIX//6MsAIDxverzGrMEoAGjepQmDSeZl3ia28XxEGdO0VTXmUebuQWpyprFkfX1cn2OLfyagaBVzCcCtJU+xfkSJEpQLEyYboxm7Q0+H8RY3zVcN9ydFHtK59KVsmkoLy5PSNy9k0AIDDHHMq7XMUnsCfNAAAASkGfWEURPCP/AR4KOc+RS0BUaB+dLNjhYANiFywCRMqHSabSv95Fu+d7Beq9/+Hr5fJkcSrT8B5wiyBJ87R9gR5WmMqwkAaDVWzVAAAAHQGfd3RH/wHEh9YVOFLG2qKwSEAEPlWaCRqm+E8oAAAAIQGfeWpH/wHEyUZUbzcCO0qZJWJwAQ25VtRxSiIoJMM2NQAAAHVBm35JqEFomUwIV//+OEAHyJz4IXBwQAbeZwWYTVEWH6qWlwaS3NofWqiXTYbDrcGWgVyaek1nN0O6T/iHehj4Mbxq0hf5iSt8ts+2tGYSKrNmm87p69750vzg9aU8sjmJKlz0lBHLj06DXDkSjojRPuA+T6gAAABdQZ+cRREsI/8BHimzwcnscD8gR2hxhPqhwewAGy6v6165FHUxlH4kdD0t9DOq9lCBOgDSCrZoFz+JVrXuKHbofjs6Xf98oYSdjYu68ifbFbnLNQ3i4y2QZSkItkjpAAAAHAGfu3RH/wHEh9YVNiKlMLatmKCVrABBBpA3hlEAAAAhAZ+9akf/AcTJRlRkmwehzcpAY/crsirDAA2esuiVhJ89AAAAZ0GbokmoQWyZTAhP//3xABNN4Z8hAAIYL0vB3Gc8Jqj45104mZyjOqdpetZfqc6R2ySE0ZKt7Rn32e5fx4woxVe1EoPX0bHpZn6HRvVd6uJRxgk94Z1veZ7ZAhXhZ4LoLku23Rep3IEAAABOQZ/ARRUsI/8BHimzwcntGutziTuumZAAuLntfW2Yi/3gDB7FL64Z6X/UeTmA9+596I3gM8Aho5Rarp9YvWYiww5uSjj66v2uyPIA/HpAAAAAHQGf/3RH/wHEh9YVNiKlMKzhSZumYAIfKs0EZkp4AAAAKgGf4WpH/wHEyUZUZJs+MAz/NAbfTngAnGiCdw9XcY1065q9CHcNEo4RHQAAAGxBm+NJqEFsmUwIV//+OEANbO2YvntCZye5TTderofo8ACzAtUzcdBsf/qywRknS26P7Hplm8bCEzRtVkNnVF41fILbqPrT3BEvWHtM8bkC7x3d0mQCYHqngySLUuyFxi4dnmL7sPni2GwcPKAAAABpQZoFSeEKUmUwUVLCf/3xACDGoyIlIWMg7/rfK4XfioCxACUIgsjTPBKYXvRv7OdwNPJ5Ean9Q0/e/tDJ8P7ClzQzW7GEYQPxZUnu4AD4gNBDTrKnzbwrvzMyWzhFDAEnZa/0jGFdbbAQAAAAIAGeJGpH/wHFfpTSsg45j9J8h42DM6POAEM63gz8LZeBAAAAIUGaJknhDomUwIT//fEAEs57BdEQkAEPqL69eGt30RB4LQAAAGtBmkdJ4Q8mUwIV//44QA1tmNhCHFbPPoL7zoAJQsMTZm7xvqyeLp+D6HXCqf6RYmFnMEDMyG8jcER8rzwTqig/qd56guxzh+IoKRs615xdqvqBRNNTna1J2yA2AqRIcQRkm69RDBbdpMD9gQAAADJBmmhJ4Q8mUwIV//44QAfLf+bC78q+p4AJx1SK0RyZsEteU37QMEBMRXnHcEau85nY6AAAAFhBmoxJ4Q8mUwIT//3xABLJOwQ9u291KABoy3G+5HSUsS5jHF5i2aFnocL/hXfB2Lf+btEWPLw9vovIhM+x5pG21MEkke7m/FF3ibELpw0VQ93ucMb8nQ6AAAAAVEGeqkURPCP/AR4KOc+RSz9m66Gp70z0xd6FIAANneB7gMu09XykT9S8c0rb4mFOhIeeRhXV7PWhHuJDp76cQuEsg+cbovGjG6qRYwAPn6KXPtB7PQAAAB8Bnsl0R/8BxIfWFThTxUlaceiuOAEJlWaCRDBJTBSAAAAAHAGey2pH/wHEyUZUbzPPNYEx8yo8AAbPWXRLMqQAAABqQZrNSahBaJlMCFf//jhADWztmL57Qmas9btLABEHlPchhHu+EINWNXBW18NAS+WWLb6mAN0ndfGY/Ikzw6qqKAdortHh3YYAebNPyKJmzXhuLr/j4pgGvMRXh2s0ZIg/1FuNdZ1YiJwUgQAAAG9Bmu9J4QpSZTBREsK//jhADWztmL57Qma80PBKBLWAEy5GO57/JpcyRvgPhZr062NtmFyaRWa8JN3INqVMNo9IIEbBZX4dGkvYhCfc9l5ebJtdRsleGRyp0zg/fEfAoV3eOHRajO3xFD7vx6z2reAAAAAfAZ8Oakf/AcV+lNKxIg4VgUq0vdD6gAbPWgLFdSBI0QAAAHdBmxFJ4Q6JlMFEwr/+OEANbO2YvntCZp+AiA6gBL2TjTVs/HCj5dz2OFbHXC6je/Dfvfj65tU6YkhlXZkIbWOtne4I/WlQXjC6r110y5PpIbslbZw72yDVeRG2jztF05AMnbo8CUiUGANjizWbC/9eARLEMPNhzwAAACUBnzBqR/8BxX6U0rINRsX4S+Qo63AAGz1oCxZ5mDM2rLdIl7Q4AAAAeUGbM0nhDyZTBTwn//3xACDGoyIlIWMZbtSqTgBMRvFiO3xh+GH/kvYNbwTd/dminpxrj/+6/L+3NLDLcCwoajevJqML2YRZ7mtmFv6s6ovgVJku7wsmBlYdiMvO5UFcOXdYtNVc7J/TcThts8UQy/z0Zdg3NfVdDnEAAAAoAZ9Sakf/AcV+lNKyDmCKfTxZtlgwAPwrPxbsfFepwRCGfr4isgSEywAAACVBm1RJ4Q8mUwIV//44QAeff+bC78ic5yqPoANhckNx5KFw1ZKBAAAAckGbdUnhDyZTAhX//jhADW2Y2EIcVs8783dXutPaUACZXUlyylscjtf5ijmXubjltL35uQbqG9n0nDJfwwnJsIhzwdEy3CntNooAtTIag+Ra3tp3BbBuwNY1W0G4IU7HZheCj4JsilUEl2x44eVy570eQQAAAClBm5ZJ4Q8mUwIX//6MsAHn7jgdHU5zhMWAaPHoWV0/2djMTLWpT4ekQAAAAHZBm7pJ4Q8mUwIV//44QAdzVUw6olZf7AA7Q7krPkwfau2HCrVcQgzpZ71lfyjzduN83aTR1X19XJ9C5f8moGNn+onArNZRlcciRIlKBXsEfcGM3aQnQZ4HP/LBqS5BOhyk85dtYmDS0ZCQ5bd+cVqhirwrJLRKAAAARUGf2EURPCP/AR4KOc+RSz5DHewF5ojhYANiFywCRMqHSabSv95Fu+d7Beq9/+dcMDY7E30NQzjH/P9AAL6XXvBNazc38wAAACUBn/d0R/8BxIfWFThKTpMofNFgANdJBJgDi9SWUNCwiwNHnr5AAAAAHAGf+WpH/wHEyUZUbwUCZNVTMIcEACHyrNBJpqEAAABdQZv+SahBaJlMCFf//jhAB2WSBrRKBapkgAvftxoINBNilGgG/sevCpl/AOdB4NnWhiLPfODqysrqyGvbRUSVhNy8CA1O0b1IToA/vBGCuj17VID7ChaKJxjg/xdwAAAAIkGeHEURLCP/AR4ps8HJ8MHGq5HMnWUJkeAC58nCbPRSCvMAAAASAZ47dEf/AcSH1hU4Sx+FfKdhAAAAEQGePWpH/wHEyUZUbwWqCF41AAAAW0GaIUmoQWyZTAhP//3xABJJszNDeuLbjgAJxyUZ4Uq8Fe8TPfmKoxMQGIRH0IFRJ/ykXqeoISAd6bF5Z0FZcLh7CHEmA5aXf+Zg6Kcsq2nUjEP9DBHmx62bolEAAAAUQZ5fRRUsfwHF7t26piEr9QmxpKAAAAAiAZ5gakf/AcV+lNKyDBaQURU+ZYnABDbo1mpddREUEoMnkAAAAC9BmmJJqEFsmUwIT//98QASTm0B1MSAC4mOvNZAwBy8hJ8BUHkpb3aF+Gw4Gx+AMQAAAFlBmoNJ4QpSZTAhP/3xACDI6/nNjhUJ3kGIO4gAaAmS09GKegdt59xBBMqxAmlphF/1hf4ACDcglZ2ySeNV0onjC4URsa0fgkQbcr65o8i/j6AyZ5/CHnbwXAAAADZBmqRJ4Q6JlMCE//3xABJObQHUxIANu08RHKUmMoovO7WSG0WE0N5fjeTZ9yMfe/M/XBy/9EoAAABnQZrFSeEPJlMCE//98QAgyOv5zY4VCfuw72WJ+2YngBLbNpLOhu4PgKrsb+a7l+WCJol5AYKPZf3eAvKksQTAYmNFlMmTPtc4BU9xiZJjHUUSNVhpvtcjbnXZUXczbKdLFCtigA83oQAAACVBmuZJ4Q8mUwIT//3xABLObI68myVQxvAAjArgdK6A6gPPo0chAAAAdUGbB0nhDyZTAhX//jhADW2Y2EIcVs8+g72nCADjz6NbYLvc8Q3KTuU8QRh2o2udDamKz9taJK3li+I9o2TRL9XXIZOUV+9/itWp6Pv4fwcao5Pc/phTKK9fwE6YfJ4U7O/wEp/NLxEE0vWqmbvwtqyfkg+5wQAAAGxBmylJ4Q8mUwURPCv//jhADWztmL57QmaeKZLIAJUk4tyxENBcwqKSMYcDtcf6p6H0Xx8nkJB4t8C8BgwO8kaZCLJVrOzAYnyuet6cUJSnqAakT3gMj5Fd68YnxhAGrxYrLkje2B04yyY+reAAAAAmAZ9Iakf/AcV+lNKyDUaP8uFUAggATZnA1MAGbh/r0YpMm1ASSPgAAAAzQZtKSeEPJlMCFf/+OEAHk0VOcxuw92yQAlkqm/CQn+ZMM1d5+k2NOT0TECm5+m/B/XwxAAAAXkGbbknhDyZTAhP//fEAEtotB2q8AJbXbKCbnUZ2Wo9Uv421XPHTGCjfC4V/X2y/ya1G8WJGY6yvcxTcSU/Zzu85mTv2rgm1qjmdODDoxKpxOsvGUsqgZv++YaLaURgAAABWQZ+MRRE8I/8BHgo5z5FLPzKwoAMHHibgARB3mXYLNTalNnNw/iwOYY7yhe2MqGmRMehfspGQ+GdGG0Ev9ihoslYKzFjP/2fOZof5WNeu3FvDfHM0FcAAAAAdAZ+rdEf/AcSH1hU4TyjGU7kMySYAITKwmBkdtWkAAAAbAZ+takf/AcTJRlRvHQtvQSyDuqABs9aAsW//AAAAX0Gbr0moQWiZTAhP//3xACDGoyIlIWMa3NdMPwXABDnPObhdgrJ7awKuzEbYPBbx/xcKyEMchcrGUY58oO+h/b+tLjVGlPwEqAxW+u/yhp44BZE1PvDSsFfhpcDK07NRAAAAK0Gb0EnhClJlMCE//fEAEs5s7z7oQHiqWg4ALi+PCP2HU8l0FB/rLllTUb0AAABfQZvxSeEOiZTAhP/98QAgyOv5zY4VCfmdUot3oAAnHB8j/NbWSU2rPAXzIlsVxjRXnu6hJAKI443cx0jbNJwEw9lD85/1Tl/JCL/5FB3NShee1azcIGcoelakqHXCz9gAAAAvQZoSSeEPJlMCE//98QASzm0B1MSAC4vjrBrRG7gIaebNvS2rObzoV6uSX3n7/IEAAABgQZozSeEPJlMCE//98QAgyOv5zY4VCfb0ptRAAzWEzwqKnuJkSNveIYqeaHV5vX4nGCAmry/3ZASAK2fAdsUZJnXTVM9Ls59lP+26hlO8UKeNd6Ig7YkfatbE51idrnvvAAAAO0GaVEnhDyZTAhX//jhAB8t/5sIvyr6ngAs8liz8evlvKtGkkw3/45LpNkgNt12IZ5YDDe4UYOK358B5AAAAfUGad0nhDyZTAhP//fEAE03CdAIAN2R9Dh4XjT0BDzRlsV7R0CqjbLunEzQN53oO/OVSZTXI+bRsD6R9goEBlVLvXsLOvEC/02KsOTa/vPTgYCzuLhryXn4bnyVRG3TQEVXHB7WXq9eANORa1xpgZ/G84uneLc457tQ6r43lAAAATEGelUURPH8BxbiTleQKUv6vsn+cHrmACZRcKZ+YkqloHo2UDeQfwYIDy7xemIyauUy21/LS4dN7GXf1YlKAeLa/A2WOA7GLTCP5iYAAAAAgAZ62akf/AcV+lNKyDni03PcTHMWpabAAhaGiNH39Q6wAAAA2QZq4SahBaJlMCE///fEAE05sjrsqPm4AWt8eEs/IvIB0chYGDfjw4Yzh/ljZWHcxLmxgf8bzAAAAWUGa2UnhClJlMCFf/jhADW2Y2EIcVs9CGurOEAEqTETZalPxczefPq8W/1vKMgRkWJJv5ybpdJ0cFge5grRzb5Eop5j0hp1OjZEzLcdibUqhW4DJu473NtWAAAAANUGa+knhDomUwIV//jhAB79FNZSVukFACZW+m07J/E9gfLatQSzu5ZbcyuxsJe82iet769yBAAAAgEGbHUnhDyZTAhX//jhAB8tVZZy3F8ADaC4GVWfHbsUyTULxphCFjiJNYOQWyRV92AQqGwF0l+xHGM5YBX0yqbou7chZ6AxR63sXpTnkXesHqN71zMANYTvYMC0MbtAMbOGjGanYQRsObUkrUBAVSKdP4ycW2jgRoWEnmC2gEx9QAAAAUUGfO0URPH8BxbiTleQKUvUGB/kwBYAJU8xyHF16OeNGa/FzkF1R98tsWqBDjotrUrhbDBkafbSNtBu1c3Lsx3jagZqk73SAPPFhnGNPB7SyLwAAACABn1xqR/8BxX6U0rIOHSnUbBNAEymACDwRlZIOt2OvcQAAAGpBm19JqEFomUwU8J/98QAgxqMiJSFjH+/hiqvLgAh3Og9zvLzW7pjfgvbwwWJ/zanL9nK8eYGwYvYkVtFIJqCqQ8IWrxRZOpZCmOMdYWkHOf1ruswRKuQOM2ef/sBmvXIv7+Pge2+GWuytAAAAFAGffmpH/wHFfpTSsg54tT7G/+chAAAAX0GbYUnhClJlMFLCf/3xACDGoyIlIWMg6m45VOXkACcSeBPTw4L1tdAd/z0bVmluCJnv1t0WmzeXqHLGZ2hsq9z4TKcYHVm2ozm/yAxIDGTFb75rHnEB+zoSJPExVXPeAAAAIQGfgGpH/wHFfpTSsg54tkHETzx2eAEHtS8VGmv9LVoyOQAAAC5Bm4JJ4Q6JlMCE//3xABNObQHUxIALiY680UsAcuovqL9w8Ml/g15uUh2/NvkDAAAAWkGbo0nhDyZTAhP//fEAIMjr+c2OFQoNAI9sL82CwAgIk2TwA3s5CL8M/7UbdWo+ajQ1+iUG3Fpz6aici+2zKz7wKwChxG13R53NRWYJYtT+yz5tadriBA7KwAAAACtBm8RJ4Q8mUwIT//3xABNObQXRHVAALhYnSxTZe5L7ax2GBwW7Y7MhI54GAAAAZEGb5UnhDyZTAhP//fEAIMjr+c2OFQo5om9liftmJ4AS2zaSzobuD4Cq7G/mu5flgiaJeQGCj2X93gLypLEEwGJjRZTSEsnu0QiVbcuL131DL16xVOajGtFTArBdURzP7uRl5s0AAAArQZoGSeEPJlMCFf/+OEAH60VOc2kEXvr9oALoLpO/nenExVVpB5C7VZBZkQAAAGxBmidJ4Q8mUwIV//44QA1tmNhCHFbPRhblpwgBHuE3dOCsknnOPezWI8IjC6ovRtNKYrP2zDDLlh/0QacmeFX7gjTraIhD7E2rU9H2C0TW3qOT3P6vTavATEqVEZyFK/VTzyYgF8dtcBLJyIEAAABrQZpJSeEPJlMFETwr//44QA1s7Zi+e0JnxBh/KADg6LONxq5X3fY+wg//eBupz00zDBhq71r6+r0lAL2DcT3OAwxS+mQQIaqatGlsAM9HnzcpBAczz6MY8PlFSQxkkg8q5LkvzGwWEcRhYLIAAAAoAZ5oakf/AcV+lNKyD/G03NzUAggATizpNTDv5L/RY28KTJBJpBnF0AAAADZBmmpJ4Q8mUwIX//6MsAIRTJ50BJgtL1wAtw0pbLu0Qu6l6KzhFiS4imr67lm7IehUUf/6jiEAAABiQZqOSeEPJlMCFf/+OEAH7zjYOdEAIFjsjcqBUEWkVz9VFqBZlWTMYKN+CLN6u8mQtVvhI3f400n6AnnS883o4PT2D+hsKpxWIhjrKZ8XJ6yyuB/rH5EJymMbfAEgDXrIPYgAAABYQZ6sRRE8I/8BHgo5z5FLQf4bV3sABsyT2loNvbo/6yYmiwb+i5eYhbvOEH1peD0S2XA3yiYxK08whLF726zdNCmAmDi28mAsTKNPjdMjtl2AIvaSsXH/oAAAACABnst0R/8BxIfWFThXZv4WJb5jW0AGwroLDWOAEYLPgQAAABwBns1qR/8BxMlGVG9VOEXyT2TvhwAQ+VhMDvtwAAAAV0Ga0UmoQWiZTAhX//44QAfwk/GrckAG0FUYMLvt9Oph6S28NZn9sK01R6OrM2i2xG1IONNeLgtR22wu+XuAt+pq0kn8HWVlp5GBntucH39I/v2woPAzCwAAAB5Bnu9FESx/AcXu3bqmIWTBN+XV+SPhwATqVZoJMt0AAABEAZ8Qakf/AcV+lNKyD73DE+L4AC76sTslh6toemcCG7chAi4iEkiBy93x0oJNOglpOtDgadn6g5pCngXz2AmY5b2H6BwAAAAvQZsTSahBbJlMFEwr//44QA1s7Zi+e0Jn0Mqsu5//eQA3NUSuhh18hK90M8e2noEAAAAbAZ8yakf/AcV+lNKyD32BZkVOIMACEysJgbBwAAAALEGbNEnhClJlMCFf/jhAB+tKQybHKe9WJAESDV13kD6iE4A+BdQm+J7UNRDxAAAAdUGbWEnhDomUwIT//fEAE9d3UjQ+AFqtbsMc1+MF4d4Ziu6iIHLE6Jz3Wn5+ztPRZewJhlIHnZc3djy8eKXpYQU/L+f9UV2wCq1FKvBxD/GrlSpq+Ju/598f5x9rRUpqXVxuRkzsIpmfIgycX+94Gq8/6CdYPQAAAGVBn3ZFETwj/wEdsYoVAXfwAWoJv+knsMqky/ptO1/WG+md33h6Sl7OEWXKVnEyGhs1Zkwc0TxXtw2tnfLWG7upTi2TdTn43mAGH7reHC7zIlG+7Z+e0igCvmun3Dr1JrOb77eRrQAAACQBn5V0R/8BxIfWFTY/1Dph0SdjOBDABD8kKlCff2Fw9J3/tbQAAAAiAZ+Xakf/AcTJRlRlFOyLj4+rds5qeACH7723oMQzUuvAoQAAAGdBm5lJqEFomUwIV//+OEANbO2YvntCZ70iM7kwlAAEzvHMw85DaPlgDbthsvl5K015K2Myz/llrRORbNYOJt4OFx9PoW5JL8F+aOCSlJhkub7nOLwqIP8LN8kBop5r78i9VNI0uFNcAAAAWkGbu0nhClJlMFESwn/98QAgxqMiJSFjJ2/72WPIxQUwAWREJbgV4rIdydsr5QremszBjPhW+Kr+k+Gn4aULE9mtjS2Xq5M1Wk5psTtDlAMN9Yei1cNBPkQgswAAAB0Bn9pqR/8BxX6U0rIQCeG+pykE80AAbPWgLFe6gAAAADFBm9xJ4Q6JlMCFf/44QAe/SlnjhqACETKGmXBOx3EsfWfa5IWD4kwPFXEXEFEvjoWhAAAAa0Gb/UnhDyZTAhX//jhADW2Y2WmALOozD4JTzT4nb5BsTOXj7OhSUXfD1k+N2RkJyKbewpMrmiHBTY094BbdSDFrfm1v7z8lMmknghQR/UVGLD7AZgsLAzAhK6gT9CZpVXM5be5gfNeJQsrBAAAAMkGaHknhDyZTAhf//oywAhPTek//gytR+QADQeFHhe3eSMfblMLNwuaUHNN0ZQUUIHgFAAAAXUGaIknhDyZTAhf//oywAf+qNz4RGPpEAn0AC661FzFmsNUA2kageDQ1M+NYri9VRuoO70t++gCepTo37rXDl2brrt6V+oS6G8ZVJuteQkJI8CZNqWr7SslbG/lmgQAAAE5BnkBFETwj/wEeCjnPkUkN7D41V/OX0rRUwAbFT5753NdIPGnq16goX+dZ2wRCXwu6Zebtm4Ed3/xomqlfAxr7m5rO3K0q2KM9vGFL8ZwAAAAnAZ5/dEf/AcSH1hU2IqPSxB1dvdogBDdD7kZyQw3v2OSF4tLy3xugAAAAHQGeYWpH/wHEyUZUZJsRinZrJX6wmoACH5IVKP/hAAAAakGaZkmoQWiZTAhX//44QAfLVXCLL/AAqTzo7FSFfCR2TrxiLtFMJq+qM597uTztg0xZyQOwmOGt1NdW5xFD9W3Ea8cd3ZYAgeHXAq739ugFJUXqlPCYz3JATNVYXsOW9hyFelv+jr+uTIAAAABTQZ6ERREsI/8BHimzwcnkV0q9tBYd5kIa8AIUWkvWsnA803onFU7/bZborVGQMq3qs91Eu0zMfkLOOKcEDrJal/JhHhik0QLiu0SS3UdqAcrD6cwAAAAfAZ6jdEf/AcSH1hU2IqUwVGYLcoACCojdaRT9YvkcVwAAACUBnqVqR/8BxMlGVGSbEY2rBbjtr8AAbQqz18lfhwpTm4z6oTXVAAAAV0GaqkmoQWyZTAhP//3xABNuibWS8nSAEjZULDpk9CCXoq8a07IN0i+rXMd6hGFtW4SZad+gEa2/pZI86DiYrlFJkjxEp0ZE1m+v0xdyyXgo4Fv2UwHWGQAAAFdBnshFFSwj/wEeKbPBye0a7UH0OAAAcCHeabLNv8Kdd1cRLRBp9vzHDXirMRIXoYKE3iHGv+ii4Ksa4DhqaL+SjWN0MUt1pmUQ/rYw6GFhcxqGGq9i57wAAAAoAZ7ndEf/AcSH1hU2IqUwrOnwvwATblT4xMvMkiFjlpIxSXAz//rqgAAAACgBnulqR/8BxMlGVGSbEY2rK3Vx+AAPlONdncBNMNPHzsqceJ8ALGf5AAAAaEGa60moQWyZTAhP//3xACDGoyIlIWMa7q6u7O+MAFqzfrKcCLBcI9BsrlA96fY2FDSCJAOBp5jdT3pAInKUPSHMRPY9IHuFh3+8bEk0xUgiMyse78s65IMR+Mw5FzkRkjJaBfLl1qzUAAAAH0GbDEnhClJlMCFf/jhAB5NKWVs5ypNQAczkwUq6ZxYAAABhQZstSeEOiZTAhX/+OEANbZjYQhxWzz72lqycxAB8zp/9CK79RWBYYXJr9t4PXo4kj6R5vMOSgWutnZxzVNjPZGKxOsfcPMtj45kchJyuHRe/t6P+OzSiw9rQ9NEcmxnWawAAACFBm05J4Q8mUwIV//44QAeTSlsqEAgAXyphlhoYsJMTHgsAAABqQZtySeEPJlMCFf/+OEAHn1Vlm/KcXwANoLFTjIFj0YJ1ZoFId/NYA3eN/UXURi/fqNbvrSN6RMJN9Ka6nKQJrWXywKLn7VgxQL9I/mr8Qfocn2bxxregesKi704cHv8LvGCTdGobJcuPFwAAAFJBn5BFETwj/wEeCjnPkUs/7GAApYAIaFjFuNcBHhgVJXyOxn/sfdpoLfq3gZBtaTIeVb2sf2vxc8H/pFdbeq+iXU2ZK3t9VEUzGpc+bikh8iPXAAAAHgGfr3RH/wHEh9YVOE8n3ezpZLAAbPWXRLEMElMP4AAAABwBn7FqR/8BxMlGVG8dAmTce7eOICABD5Vmgkz/AAAAaUGbtUmoQWiZTAhX//44QAecmmEngCwAQsda0Yb774ULgAIGO0MkO/wrvd7aS2eDJ3PJ752ZiJ+yBMYkxJTd2TaI85MT+RtvILLJrKzoDltNtKfL0nneV0BbqUrIOCWRgCcBy6dSKn0SMAAAAERBn9NFESx/AcXu3bqmIU6BZqRgDZo3AAfkCUD427pd3c6cmtSFGxS7PnNmKuupdLi36XTBzNyLQ8fEMRnZ4+p+UZBMLQAAAB4Bn/RqR/8BxX6U0rIOkw/cHSk6OZSgA2Ft/0bRpYEAAABgQZv3SahBbJlMFEwn//3xACDGoyIlIWMZwj4bkAFoSfxoSIRvmp/sHyJVORpUfPXQlYFcONLmB9YBzi1hKFoFlOZ7oM51TOL19UwazG323GnBMXuP6wMGVakcLuTmDu23AAAAIgGeFmpH/wHFfpTSsg1GxfkIiVAAhsna2hJz+Hmxyvbf8a4AAAA4QZoYSeEKUmUwIT/98QASznohLsriH4wtuQBDraoPapFAWIVleCHtAUoOOF8M30ZRs1bQzrbm/4EAAABoQZo5SeEOiZTAhX/+OEANbZjYQhxWzz5ZiM7kwlAAEzvJ67qLwXu//FCY296dEVStgzJf8O+vNGiiAv6Hhkhldj+51ah8YJ5Q50UJ4ae0ltTzPRDwcn/OcM0tGWYycQdZD0Hmznx/bucAAABmQZpbSeEPJlMFETwn//3xACDGoyIlIWMa8n3sseRigpgAsiIS3ArxWQ7k7ZXyhW9NZmDGfCt8VX9J8NPw0oWJ7NbGlsvOudeB2/99o1jqwyR06ZolJcVKxEkVRMqw+jtWaUNcFVvBAAAAHgGeempH/wHFfpTSsg0KjaOSphNUA1k0DgBDPJoufAAAADFBmnxJ4Q8mUwIT//3xABJOewHUxIAJm/Alc7M/9CmimVFCPVtzjHSYg/9lc3MRHRKBAAAAZEGanUnhDyZTAhX//jhADW2Y2EIcVs8/dh6QzWrwAIXprvh6yfCK2On02bXfSBmkyVpuLcvMeq/M5cwiYm1uyiWUxI9xBIJBJuixsx2rfdRv8gRYYjxrJs2geIsaEh9VFaILDCUAAAAxQZq+SeEPJlMCFf/+OEAHn3/on4WOT4lUADlQCeFPRV5K7o0PCbBFhdKPMNN3Zt5qQQAAAGJBmsJJ4Q8mUwIV//44QAdzVWWP4gF8AD91RE3Ft01X0yC/b4vcH7wITU5/VaGO9JkytmUwHVynQOeebVsEZbR9u0Nxo/XfThZDzFJMMYv1pbTbeyHhiFW+Rbhnioq1hXoKJQAAAEtBnuBFETwj/wEeCjnPkUs+QyKHzOPlgBgBB8F616srk/Ysm06ttvrCu3RVGe+2S0acnXCjIrdbi5qXI9IRmuLwv3FJb9MR4EIPIMAAAAAdAZ8fdEf/AcSH1hU4Sk6TJ5xRkmoNQAIfKs0EmmoAAAAcAZ8Bakf/AcTJRlRvBQJk3JP1hNMAEJlWaCTTUQAAABdBmwVJqEFomUwIT//98QASanA5S3+BgAAAABRBnyNFESx/AcXu3bqmISoJpdqSgAAAAB0Bn0RqR/8BxX6U0rIMFoxUjzhUHw4AIfKs0EmmoQAAACZBm0ZJqEFsmUwIT//98QASTm0F0RZkAJjzqGSkGNHdB8dRTbCkoQAAAE5Bm2dJ4QpSZTAhX/44QA1tmNhCHFbPO8etc2xAByoARKFOxkslv/NmJljD2xkkt2kN0FwllT0owBF12ibvFyB80U+KJWOwYl+lrFopUekAAAAnQZuISeEOiZTAhX/+OEAHZ0V7KhP2gAvQmLtTu+b9KHBfRJR3lFYmAAAAaUGbq0nhDyZTAhP//fEAEllRYi4PwACT94HcsqyThC0g35PtPxNdAB2fTZtIqReW/WUntbrLKGl//6q/TxEp719fBWIl8AMT5IJDGMXtq59IUNnVwUZZNjzGHGvoXXt4ZpssRDu6s6b2+AAAAFRBn8lFETx/AcW4k5XkCk8OScjnFcQgBLVOt00MsvnIAKMWGnq173LVSXAjvYIP7CipJgGGeh1qps70EPLlBPGts4AhppdCGYyPZ8kAHpa5yUFJ0BkAAAAcAZ/qakf/AcV+lNKyDQqRK102c+QtgAbPWXo83gAAADtBm+xJqEFomUwIV//+OEAHm4ksc0Z+kbvJt4AEqTETE884auVBqfOtnNL/Cd6ieRpF7OMovIYjdN7XPwAAAIFBmg1J4QpSZTAhX/44QA1tmNhCHFbPPrcTf5QArPYeJ2BjISLnynd2x9JuT+BeRHb2uv4XqWnEc/1RN7aSwsi52Q+RNehgxQLI3wTDbDjt5qsUo01EBtiDMo0QjSu2c/Ip/aNic/f/XqbPgBjAYN2ZRCzjd7HCZNnMTe9tT5GwGr0AAABvQZoxSeEOiZTAhP/98QASzd4aqvACW2niEWaVm+d9/SWyQ9spHQrsILP6TN3GM2PQ9Q8veVw2s+SMP5jlWLwrTv3BTTjZNfRdQ3bPnLyqQKjgwjxU7K9vl5cN9ftuJAbW23dy1RMd7u2JmIutwcCAAAAATUGeT0URPCP/AR4ps8HJ8MYOhFHuWoATHdCI9aYNynJ2J/wzDH7qUaTMxt67dZRa5VOrj7xgMsURv25UmggRqrAdUS431DQtLUZg3jW9AAAAIQGebnRH/wHFr4pDCp6RMIrsCDIPcXScJcACdSrNXm1d3QAAAB0BnnBqR/8BxX6U0rINRo/y31vqyuGoAG0EB4Q6XgAAADhBmnJJqEFomUwIT//98QAS2kck0zUn0Sa6QALoGBbzaxXbOrhP/w2VNjyvps0fQCbQn7Xx6+a3hwAAAGFBmpNJ4QpSZTAhP/3xACDI6/nNjhUJ8Sdu6wTEEAEris6eWRQdwig+pTxsNCny/bRmynW+IQa0tzZ3WuAilrqS2z3uVdi8/Q3bIpmbl5MQN5FmaGMWjFc7OKmtkVMmz/f5AAAAIkGatEnhDomUwIT//fEAEsk878TmMOeC2wAmmIv+nx59fIEAAABjQZrVSeEPJlMCE//98QAgyOv5zY4VCfe3vb1DKIAHz5EIGr5STv7dOrz62p66+PQbV/X2mIWRih/4LOcuTUvKkvnS092UbIsbVP33ZGzL/m184ODGfDRly2ius8xHUItW/2ahAAAALEGa9knhDyZTAhX//jhAB5y9nP+bm4HpIGoAIb1R2LzcTsumt108NGkHTbGwAAAAXkGbF0nhDyZTAhX//jhADW2Y2EIcVs8/R6yrNABDeiSAiXhlpEax5fMuGx8O3DRZ5uM2WcV1bir6b17rL6anPnt9O1Cq5RmSzln8CjN6V2+wjHovlqgM9M2NVxH9dmoAAABjQZs5SeEPJlMFETwr//44QA1s7Zi+e0JmxiXrj3BdYALrCXO6ghwXTlD9YnO8xLoe/kCdhhXGOiggbvPUpn26sATTu/N9/OLjTEJytr5VLuYXBC7jgK+brTU6d3XCEpEVrNmpAAAAIAGfWGpH/wHFfpTSsg6Gex1o/HwWAA2esuqOtj8bo6o2AAAAYEGbW0nhDyZTBTwr//44QA1s7Zi+e0JnTom14DDbfJAB35FLrEgHG+bcO3c38z/SxZrFSVlhVwGelyCsEl5bey687SqSUcwr/LMVtm97Tk6PpI8F6nT8IUQ2JPJdLWBPMQAAABoBn3pqR/8BxX6U0rINRpT2p6HCACHyrNBG3wAAAHJBm31J4Q8mUwU8K//+OEANbO2YvntCZ0Q/G/IoAOBVHEnbnDZQEuFcRzg1HKbnMJRT5I5RAZYwHZKnfUiozYAKqMmZfByIP6lezxgi7cbQOi5Eqr0RSoct4Gl2XH+8rAqOP2uag9vvgiL810U++F8L2rEAAAApAZ+cakf/AcV+lNKyDni03M120VQAJqM4DXJVjyr9pgvOYT3m4oIcyrkAAABlQZufSeEPJlMFPCf//fEAIMajIiUhYx9iomxzQA3Xlv1kidTNLxSeaW6Z/DQG1MPr4HCfuepITQi2pl/JPQSkjPjgO+vLO7OrwIgFj6vcNbZmsXqnd5EHle4I8pCVMn0xYe93PxEAAAAnAZ++akf/AcV+lNKyDni03QiJUACcXRasSXIdfGKbnrt1vKSBf0yhAAAAc0GboUnhDyZTBTwn//3xACDGoyIlIWMgmdg3TIyaAEzjMuijcHbz4dIKAPt9JhU7HOfaRClNcqcFytrnm2iYJCSCjsbcru+nsQ1K+XKdbJX59txk52IdpsiS19j4TdDo59bmH4+2W2bwgQCABYsyt398IbYAAAAkAZ/Aakf/AcV+lNKyDni03N/yBtgIAEPIK74qSomLBPlrzXgLAAAAQUGbwknhDyZTAhP//fEAE05s8zzb9lJ4AN9kdTH/qWyX5OCfME9hO5ojqd9eLGs3f6PBsygRjCNpr83dWMAsoHfVAAAAT0Gb40nhDyZTAhP//fEAIMjr+c2OFQoXqhgopw4ATSUCmPg8JtnE26ErnJO9BRSu/yPfVPBptzeCs70d0yTbOYYV7OIH6hQZDDNPIbOlcl4AAAAlQZoESeEPJlMCE//98QATTmzvO76sJpg5fAATfnmMlMgYbPm02AAAAF5BmiVJ4Q8mUwIT//3xACDI6/nNjhUKFQA7rZQWAEy53i/ih8nZlApg9fBdgJam+CETwn/AvegEypsR4AApEwET//TJpEuKKc5MLjSvqLdTcNe11ZdnjQxq3/DiybkvAAAANUGaRknhDyZTAhP//fEAE2ZRzlbv9bWDg4AJxp2GDYyvWa039KpuLA/xpHUM2FWUiypXvPBnAAAATkGaZ0nhDyZTAhX//jhADW2Y2EIcVs9DB61zbEAHKfUwsU7EkU0nazxTLAXyYyNTgyaWp8SRbaj2enmQBq7j2k01rokovWFRUn+bpfSXzwAAAC1BmohJ4Q8mUwIV//44QAe/RXnjhqAB1oBKil1plDy2Lx6xT32Z0VmRKS+h7ZYAAABeQZqrSeEPJlMCE//98QAT/k+t9e0PYABKafFx4sSN0C/GRkgc787+AUp3jtDc34qk0R3hqLb9lMzpIB8iMxHmTq/eI8RKe7PFGK9xuEjge4ZiY4kKHIsW/zg46OO/RAAAAFRBnslFETx/AcW4k5XkClgb8djnFcQgBLVOt00MsvnIAKMWGnq173LVSXAjvYIP7CipJgGGeh1qps70EPLlBO76TUIaaPXzLomJq5LJe5atRIsVObEAAAAcAZ7qakf/AcV+lNKyD9mJ6EeNmWeAAQzr6DxbGAAAADVBmuxJqEFomUwIV//+OEAH60U1lJW6QUANtXJWkqv5xbdEUc1BywZO3ssEgydRBWJUoPPHsQAAAHZBmw1J4QpSZTAhX/44QA1tmNhCHFbPRlROcsgBGEB/jsDGQkXPlO7tj6Tcpf3RE5I/evrwHURcYZE30rdK8f8UZn2I1GI473TDFnyry4dR4WJ0kK8+91RluvCq3bbHntt4V5nU3t9kHTogNC17xBNbuRkkQQLJAAAAdUGbMUnhDomUwIT//fEAE9dsNuEAAmdp4hFmlZvnff0lskX+kE7sDEFn9Jw0gNdPSwDPL3g6qv+K6Iu4ZdsU5LwrT/caEHjZNfK6RFK1v7JkyhYtisuWGEqjBjJz6LppC2z1bSzXlZvLljZfDzDFIbFMlJ3jcQAAAFJBn09FETwj/wEeKbPByfDQlVYmrM+lqAEyQ0WJLhNZGWysw+OD0jvJle31oH1x33BQbt+/QeV5BHS6fPflwAE4H5kG8QH8UPqX3zG8t5wbKmfhAAAAIQGfbnRH/wHFr4pDCrDBBQmQYe2AgAQ8grvKpfyx2SBc9QAAAB4Bn3BqR/8BxX6U0rIP8bTc2zImiMmACEyrNBCiLUAAAAA3QZtySahBaJlMCE///fEAE+avJM28murHuQA2pieFyQVFr8bNoE2L7zOPESg6xkRm9yjf/f6weQAAAGNBm5NJ4QpSZTAhP/3xACDI6/nNjhUKNWdvkMIAJXhH5+4Pb4eJc69Q9Ry9+SrJG+r0BXN7NAdPDxs0IyMty44eTj8s839LWgM0XerMzcumjMCwic68g8b71n+x9a1giOA96EAAAAApQZu0SeEOiZTAhX/+OEAH6ZiABLMvQgUBtACUqW0oW1U+rPOYh5YqO9kAAABnQZvVSeEPJlMCFf/+OEANbZjYQhxWz0aZSjv8LcQAl/4ECVRHkKNmkpXfPUsUaw6tdfrGUYN/0HMrffqyyNjmkDfxjpLCaWlZB7uZQlTSHOup1Kc4BXVK97Wv5igQQXe6sYqaTDeZ0QAAAC9Bm/dJ4Q8mUwURPCv//jhADWztmL57QmfGVlyWC2krAAsmx27fYjmSsdGj8lP4HwAAAEYBnhZqR/8BxX6U0rIPvchYnwAF6xqF8LwIP8QVz5m3jqdEN6gkfMlP7Fs6sZ+S3jt0qmxNUjLQblxeDGNgLgx5l88fmnJuAAAANUGaGUnhDyZTBTwj//3hADRwof/WY4UZUH7rfa+GvlVABOsqMMrf/xzMx7Tn56i9TtVA4vTXAAAAHgGeOGpH/wHFfpTSsg99f3cbVZoB5hACDdcPam6N8AAACktliIIADf/+9vD+BTZWBFCXEWT8F5+VQMF5vuZFk7pdZ9YolIzSsUdXGSbr6zhe+jZBHHCXxH4OEq1lgjjuY0xIFkUckLZvO5zeUFvELDA0npnNOQYf84uRh+tT8Un+jqcxmMfwiU1m+IVHShY7XJvXf78hciVdEDRNRPWPxF9V8VXRg8tFeSv7gO9N7O3sgKs9swYQZlscv1PmvEEOeEUOveqR/PaDk/eMaZXAwJ6jTuX/V4a9nI6Pn3crDHPU1YSQfo7fEF1dmPDvhWRye3BQYo8YCrQpEAoiceQaEmqnJVCuAiP46jtbcw57NcTVVJhlfRy5PaXEWeng/TtHKLXJ6xsBAUb8LmkMKDMipMulGK4USyn9pkgbyTEAHqlh7E7PXOWXmNOeVHHgvFuuplKUa16XeHlepJWvHUPRblopmc+AXB9MXpkkjLksLnYFABCirP4mjRH55oGdtF2pcBo0AzWn/uZS/M712TkUtnevGbZaHgIK+bBD3DebCNOYv/eUQKlT/KC69E+wDCVEhfWoeJbB9XRUsCI/WftA3dBEUV8HbyhREYNlpJegna6CeRyz/I8PIyShXxmZcFpeppp/p6v7x8EjlKIIKG6ZjJpCC1ASasRhUTtjLPF6RC6a+zoS4nKOuiLM8t7SKZSXPieMTktfM84VFQY1jcj+VsQyRKadjwDR0N5EwgcwDpAZj1FDtN3lkflg0qNUIR76NOwJwTL25rSLzNC+AEx/hz5OTAHTdpbXmrRRFAVfTkmWMpiK6LsGcXPjZFUQX0D0qoeCSop6DAVHWOa8BkSAAwrLVH37mVb+Es4R5yg6We7Qm3hRGfBzUrs0EydeAjLt2BtUa75tEbRNiHqXlWyNppwOFLrTIjXAaT/ho1Rf8P6+Fs4rw+Rz2jFkNqlOJFor1KMY+ehc/QfC/1pW7voOuIE07x8AICcKbzqYwNBuP5RVTiBoki/9FL9fdO+46nuOtVXNjDsgOOzZHMahNJ4XaBIrNfrHjFtZo4jkIg/37A0AS+ySSrW9jzhPsdjgDKq6cObzIuGtrDDcnrXiAMerrSGigoO6nhl5j+jCG8GqfVsyI6smVdOrXuLFbpKmgacWNGaB53IzjE9lyg33kVfbQqAqEx1WBLBaGcHUty1bxBfhlCkI8IpU+0I7Xj4hnRWwx9f6Ch3HiQiR7Uf52OBD2WzBxWEHlPI7V7ghxABkPD90kJYqN+0g4qvyr++FHk8kzXEwHRpXUthOKk0wpSFVi7uZ/TtYGcLwyTsMitEDIEHRgQ8W5HG61yjqoOLA+Kf7Ayd0V80yxv+G126++bf/lXM3LmOTJ86P97ItWodAX3hOOoe5Lwjc1rts3pSl8unmyxfiWD7cU7dLoL9Oc4sdXAGp5HhXdNLVw9Jd2pnZfShWLWLF4b+24QAOZ7JMubepPA0lG4scbzJEtjgo9G/WvmOMt2VAunwbfnQq5CeW6DESl/nV2IyQA7bekklsvpGrPjmlWWwKBMyyn640zbBf4xZieta8ejqpjWBSh7yfB5T9npvNnK2aa7m9b2d8ksy0Q+ZpONwRAspd+P/p7XBOoRNo+CNG5jYFBvs6lWXMyJFAw3k185VjxsdG2B9JljgQ4ah3cQHIps6Ph91MYdTOMpFhwiT3HpRV8WSWX7STzTbEzO5F3sSiky697MKqEKieorsJFUHEgqVEvl2i97Eea6jzoD2ZAMVmyN3MkAETBEJPsDWMTfMmb6zHQnRH39zfcxtRRBR9HoB7ti5p8NtG+8ZkW9o68cR5sSj6U5ugDe019nqJs6b6GVTI5iEkCy2KmW+4tDjY7SC8cchDSfSSgeSgLq45Oq8ydMhDX+zuumFwWmsij12cAlNjJOA5gKLEY4tkOAhclAXDp2R6Yeb4BT4RG73+IaBbV2EnasnNIFAfswF2o3xwGnrzyqb50hHB84vFsbYvotA2OA2fFq5PqNu0gPKoKg2u7kEoL4wa/3H55lkxsSe/U+V4CXkINSP48nq46B6FK2AImR/M06tVZ0bx8dgPWv8PyBf1OOkE4w7bQW+eIbfezaSI8lCf1+weQJRIng25ZdPipyMfCNBi24MYeT3O5uq3ro416cQaRRGiYkqCnVomec0q5vHHgnZ0Nox9kaB91V+NIIyKAVUiztjjvjVkAS9TAPpJr8JXd5NSXMVFAMTU2gKCP8d+POfD/0P7HxizdCvVQSlMzh2f/lI3Y8bqc0IcmqaJx89fCby81vViMp7mIhLJfobsBMJHD6MB4fUNoc5QQjyScoSS+00raESTKa+1EQznCIvUHJSXlpY5dRJt/Idbj2UhcOWozUC+14Yaz8Vr0CEcoW9g35ziQfw+5xQwVGa/XWhFs3FioeUi3Z6LkJ7QEox74FDHhPUOsccoFJgjb7DJYyVHdQe9SCzReU/84BGgOEk4ceGMHc24hFNJjZQCh+cXz15h2VysluWrLAYucgmkSxCsR5+8MzlHUrIJFPZA1xhbuzIl5QMmTz7MxuRqajtJhsialAYkcoLQGSViLJaodgEmn91gW6Tfkj8Ct4gHV1N2FYhjRt0RAWGvG0Vffjh0kbd9YChgKcfoUz9/C6ep+SierqUPSQk5tHwTWJkvSgq0u4DCuPZlZR6TGoGac2ePYLv9wYNPZly82v4rVJEM+E5VhatQlFwL8WebfZvIa/SXoc6tfHIv3rXWB9s4mMH4yeG7mH3tYqFvbJ+E4nBWDJN2xeRwVVHOn6g9ckYRdfiJoi/7pInSLjyAgS2Bmer6HRKtW2Di+K0i9C5Cfb8j/LMT5vlorQhFI8Fzx3YvcKYAns/Vcp9fPb/lo3I23EFZsA4jl6UOCZk6Pa9X25BdpUuGIyYeOsEqgCPSGuiIo3AMi/6JB75LZpLC/MkntR3+fgPMmixviQcYrnK/kBL2AJr6U/8TpBysHsIAVXhp/u1w4TqT2bF4fzvqPnhZ41vkxeZbsjAm50somBZFUzIuO6o+MW32gyMBvM9KE83aSRb75Jf6K8Ig7nNhn3z864663ztRW3TBvSQobNdh1WAC9AWlQYi9atAqPlDaFN/oRAtIiboSQDmc3OcQnLxSDk5LLeWvL2/4nLOCFRGZkqJXLii7F49cjNMX2f+vYfdZFLTOlBs+s0D5t8mHes4nS1hnOs4F61IvIGokgIO73d57qa+hgAXEOuO3tVUSKcRGTHCevinjcObFwV+snnCWtycCbcVzU4Cgz5n3ic1f7H/CdUxguMC35UwK87YuChyx0R0Vyula2m2MWKbe4nlkcA4ubqXmOPGAuCJlG3b/tCqk7lBIB/z/kYBqFSk3kcdK3Gn8SzdZW64mD8UjqXZSowkscc2AOfn1WY3dzU6a6r6DvhBi3iFyhkGzSPCMmhuYAj/YtPfgg6+0v16fWVGnPrcmCgGeU4b4Bw0dUjJnIdWDUlVgmjcWCYrU7Vr1K/pQPxnRApAgAGcXg01qdDk+B22woBGxQjUTF3jpofY/8DeXAYFYOjCbd99K5xw8FC484hy5AAAAg0GaJGxCv/4P8LgAg81EmSCFjACQZCuwE6RHglExyVazUMpQLfpEjiU68mcTYBr5aoJwJDGOK3wmHF1yLe/hU3yuo5eSs/PHcjnEQTGCTKAUUZ8TsTyOWyuoo1M1omWYZ6el4Lw0iXYjIOsuPgLl4XiZ34s+PIOMe3BjIRx6cjMFJqGAAAAAZ0GeQniEfwJa/sCwgrExs7WWgASlfr/71CtmySnZo18pRKZJex0H8X7TWlkKKUt/Y7aXte46I0RKIjrDjsVDi1sXNB4g7dNM3yfusTAAHSTN9fwZsPzrjF7FDexi5Xg7IH43/F4NtEcAAAAhAZ5hdEf/AcSH1hUzU0nHPvzypLgATMBMQkkV5bUYS705AAAAIgGeY2pH/wHEyUZUUaQ/h6xuw9PABDc6h3q7jqHBKu6bdnEAAABsQZpnSahBaJlMCE///fEAQn7pUALaPCrpOlI7a/m3+tft/6D0q/AsRJM0+NosD1afr3Rck9F//iOfM4vhubZ6YVuWbg1xmhF7AeAHdghde6RE1SVNEnqXuJk+Tr1d6rsVntaTDk3slEN22YaJAAAATUGehUURLH8Bxe7duqWv41+haLKDD0nNvAAe9/MV7B8xW7fZ5Y/ZhzKubCQ3b0bVGhtrSMleA1DsLJlG4c9KCTspLhL6bT+oQqfuiCXcAAAAIQGepmpH/wHFfpTSr7EO8SImLFzk/xrOmAAQzreDPwuJOAAAADlBmqhJqEFsmUwIT//98QBCfPNzkpi+RQCAEzILtC+YuM5hfEOkBWb+IcYMGXQOBZ+K6svm9KwPdjMAAABtQZrJSeEKUmUwIT/98QAgyOv5zfvHZChmauj2P675AAmdp4hmLbrjvG4Rm05jl8brNkBu7dguQDe41m51s83omWUHb3wSsPyxu6ydxoEFpx0DLdWH/PArNL78K/0oNghL7fCrdf6sQbCw+yugOAAAAC5BmupJ4Q6JlMCE//3xABNOewHUxIAJwo/qpaC5RDxD9/mDZoF2r1fF9P6LDeQMAAAAbUGbC0nhDyZTAhP//fEAIMjr+c2OFQoZmrjhtWd8YAJxJxZ1U5g2QCrqkAh13qXHUUWLodcAg695YvrlkRQ8GUafUXqGtOstK2HLnXaLRbWqnhnJ/rdCVOpDD8DMOO26JbD6A/ovdfveNxbc94EAAAA2QZssSeEPJlMCE//98QATTnsB1MSADg536xG0XhTYnDCdhjbZlqVWu6mmnsZAA4IGr3yxa+2XAAAAV0GbTUnhDyZTAhP//fEAIMjr+dBbAECSOzC+FxjyAy/M8EcGIU3owMa7Iz//3mw3NKwieLOq2cGBHSfe0WRKChjY4GO4174PWrd+MwG6Xok5Bcuzfx7lYQAAACtBm25J4Q8mUwIV//44QAfC2tOv45BJhjOG6dwAbl3hhIxUPaPoz9b46jbAAAAAbkGbj0nhDyZTAhX//jhADW2Y2EIcVs9CkSrd9wAhOOZJ8L7zqj2B6IKkbD5vb81I62gaW3wE3C/IPDjgW+OclK+8dOU2c5BhLs6sGdA5zxpMFZbEVjMBcGJW2NqnlWRBaLTVGoavV6K1l7BqH4bYAAAAOEGbsEnhDyZTAhf//oywAgAXu85suofSsAAXDUaU7UNNEs5lldi4UpuCBeoy93lNkEW9b8esfqPJAAAAbEGb1EnhDyZTAhX//jhAB78VfI1sAE7QEnhTXWKUkJ8BCYKxRa1gNvs63dyjqHgKYeJf5wqcN10ttGS8cnricB6Ja/lGYryd7YXJHiRO2bsEPQC+BerwHL2RF936eWt1nh1taxIObuXWLgjRGQAAAFVBn/JFETwj/wEeCjnPkUtBwpbGibwPW7LgBONjZ0pmzcN2Sy3MbxkWMQoiAhxgrtE5dTAcp94yEnYPKfw1SZ223MxGIJLA9UDhuNnGZRbvvrRMdEY0AAAAHQGeEXRH/wHEh9YVOFfFPnQZDs3TMAEPlWe6zkLBAAAAJQGeE2pH/wHEyUZUb1YFGXL1pROB6Sj/8AE6IK70W1aaXIoMVzQAAABhQZoYSahBaJlMCE///fEAE26Js/TJTYOgAINIa/qSlNJI7DauRPp9sCVbLwovjdjOncamK/F1REZNViPMKbt6n371IJjx63t3/u40NJap6KHyQnLeOGNFXa6FUKghaTh9QQAAAEdBnjZFESwj/wEeKbPByfDUhiPuSgcIuWADU5TW06SgHpCEZz01+HtPz1PIsKutiD54mJkpOU84tGjvvg8PevkNy8aRMBZMmwAAAB4BnlV0R/8BxIfWFThXyM+2dbufbrBoAQbreDQF5SsAAAAdAZ5Xakf/AcTJRlRvVjyz38f8UWAAh8qzytWcTYEAAABnQZpZSahBbJlMCE///fEAIMajIiUhYxrurmNHzGAC1Zv1kidTNLyC8ogfUTQ0Een7+A1rGE/tf7z9y2ifS3eYJJZTmxBmArdq/2qCTimlogue6yBJiUBzWT00VBoKFfFZzgcLZP2agAAAAC5BmnpJ4QpSZTAhX/44QAeTSlOAbnK9TwAOsv5bpkrWJHVyxF69AQVwTBTU29nLAAAAbkGam0nhDomUwIV//jhADW2Y2EIcVs9DNh64bNLU+nFACZdUPQvaYdNt9+zM9aBS2pSge+Gw2UETleQFCt1BjlYsvXuhwMKwvngwxiGwfcoeCsaGQq3YPzLP/X31DFFigUi1aXsP9c+zoMpLvUbNAAAAJkGavEnhDyZTAhf//oywAgPTee+3fGAoW1+yACXfVyR1FK4wCT7wAAAAckGawEnhDyZTAhX//jhAB5uDRm+vgAIgxen2hHxZVRbbZSxyTmkhoZd98osFO32d+pLpekbeklQFWkpuz72F4rqJ+IFO3vR5uJnL+6zULoQfPj6t9Cv8xzDL08N+ZgyJfv0RCRJ5SpeQTqgz02saFxPBQgAAAElBnv5FETwj/wEeCjnPkUs/IOeQo/SkwAHj5a2R4lsoezMJUKyJjYxAkZX6YSeYIUHE11nYR2ekKtJRGdU7r2WJzvz1YhKZxh99AAAAHQGfHXRH/wHEh9YVOFPFSZ7OjDw76gAbPWXRK1uAAAAAJAGfH2pH/wHEyUZUbxSZa6TDq6sEACHynkgSrX8A7blgF6em0QAAAGFBmwRJqEFomUwIV//+OEAHlMs7HgANiyUfSHOigf4g/MdkfkbjXj/kJSGyh8UK3MWxpeswCjJrBcIhIK3eTDOrLmpYILsWC3bva5naxViYi3vaqZuO4zR2u8cAxnh1/okYAAAAT0GfIkURLCP/AR4ps8HJ8MUwtfBNgA/lDQWSGDDXLcFD9GkQMJGhIyDjzIAnp3iMOaNLRxMfBWGheBO4MtLly7TXP+N2HdrXKBK35kK7m0EAAAAgAZ9BdEf/AcSH1hU4TyfUez3ntAAHvwTMm+YQHnVfK+EAAAAkAZ9Dakf/AcTJRlRvHQH5GuAmACD4qbepA7CPdnemN6J5ZxuBAAAAYUGbR0moQWyZTAhP//3xABLuibBLNXYo162wAltYBuJKv+OlvlbhXZbiOZVohOddQwL+nq1N4A8J3nc715AV3ikEmi4nMrbEEegYOUaiMqltcEhMwsl4bO/T3T/E2UVHv4cAAABOQZ9lRRUsfwHF7t26piE/FYqtcNJs3PCADvUpirRYITnpMJkTn2ZAi3G+cXFp94EM0eSu/Q1edZxrWhowmTllUtSv1ii+Z0xLlk5R83zaAAAAHwGfhmpH/wHFfpTSsg1Y70xsUHBEw4tACDdbx7KqNJ8AAAA3QZuISahBbJlMCE///fEAEk57AdTEgAmZBdoXzFxnKoIiUQZjP2UzHFinM6Ph4rzB8v0T/p6JQQAAAHBBm6lJ4QpSZTAhP/3xACDI6/nN+8dkJ35q6P157kAC1Zv1kidTNLyC7hrMbU7TlRXlNQSa7+QDqnq+nbeRRLt3TRj590+L74Q9WeinE84XnsGI72SE/Y0Ax1tNN9yFhmvoAm7172NFhmY8kPD2OtVAAAAALUGbyknhDomUwIT//fEAEk57AdTEgAnCj+qlmmFm3g6WsOzNIcQG5b1k99dwBgAAAGxBm+tJ4Q8mUwIT//3xACDI6/nNjhUJ35q44bVnfGAC4fg5SqcIOR2v+KndIGyRg5jb7uk9cAwytu1GKwV7WHgxaeKm5dmyDfwYAwByfuJ9sDp4Xat/5NJEZCn4GWb9rUtUQ0gUXmPaatC83HsAAAA7QZoMSeEPJlMCFf/+OEAHZ0r3gANqFYsiJLKHDpAtUY3c4SFxTCVVIFmECV0gx/z2W32fx1D++Tb0yJkAAABhQZotSeEPJlMCFf/+OEANbZjYQhxWzzsHMMWgAnHUtLTDaIdtfzzkBIhxc2k7ru5OlQmx0RU68xkXlAoST1GSsPCy0LEGN698ue3xmPymNKYw80blrVzAaTKsvbfBGs4eQQAAABRBmlFJ4Q8mUwIT//3xABJTX6rXSgAAACJBnm9FETwj/wEeKbPByfC/MmZq7VL0GogBKUaDNZ/Ml6MRAAAAEAGejnRH/wHFr4pDCpZIjEEAAAATAZ6Qakf/AcV+lNKyC/QGsQ9egAAAADVBmpJJqEFomUwIT//98QASTm0B1MSAC4vjxCUvCnGsjMnYSHZApEAVqZ0GRcwh8Y9VMIciYAAAAF1BmrNJ4QpSZTAhP/3xACDI6/nNjhUJ35q4yXZjABOOb9EUWFPD4Cq7G/no9v5nmnAspSczlvxbfh8IOvwTAgzHyqxKUvNeBj7Mb1TmfjlmRV/d2mu2UL5c95JSSPUAAAAvQZrUSeEOiZTAhP/98QASTm0B1MSAC4UPiIFYUNIbA1pNubxmbVWg6evENMH9EoAAAABpQZr1SeEPJlMCE//98QAgyOv5zY4VCd+aud8+98YAJxzflMELHgYAkB6LRp7LwZ1h6TviKEC2B/hXDrPVB6PHPUxG4J+t0yN6jDXvR8UaxXRYNo4CSHhrn7ySEIy/0gqK0Wsr4Z9vutqpAAAAO0GbFknhDyZTAhX//jhAB2dFc2om+BcuACQgbQplwZkvPFvPovIYf4zMQUBmxjH5RN3HB4r2QJO3/MjBAAAAaEGbN0nhDyZTAhX//jhADW2Y2EIcVs87Ajv0QAexAGTI9zUz8YZspvxtFPFEtmjEPR1FR5Xccf/VL2KtrFvgNHqZxE0djdSKGqNmNuPByBjwkZLvqJ0arES9RxybbQvJELf3sfHEDhuAAAAAfEGbWUnhDyZTBRE8K//+OEANbO2YvntCZpACJBqwFACKqxW5ScZvKU3nOcUMF2g2sbfWlf7BWclLr9Y9/dl9/w2EQA6iyuhJ9CUSPFkeg4K5NA7HEjAztjCoXfBwejr+FOKY0eai1x/lOEagdmAvTyAEovlpK5oonoZm23EAAAAfAZ94akf/AcV+lNKyDUaP8t/wzvDaypsACHyrNBHpoAAAAGJBm31J4Q8mUwIT//3xABLoSKBXdrwAlfWlaSv8JGYK2CmOBi+H1rBTS4gXlZu1fv+U50h2xiQwLsoTcF4NH5+0Op2b8yuN5YUc9TwL44+rqBR7zVh8UVAmUsdwUHc01Hv4YQAAAE9Bn5tFETwj/wEeKbPByfDDjbgwqEXSqAEyu6HY9Jtq9SYUWT0y2jRD0ZIhPaOlMFOYzlWPRF79Qlis5RJzPEXCo1hBI54fvs+VwLWWwnO9AAAAHwGfunRH/wHFr4pDCp6RMJd7dQANgWcHwuaNRUXdr/AAAAAlAZ+8akf/AcV+lNKyDUaP8t/yBtgIAE6IK7+EoK2LbLr/b1PwLgAAADpBm75JqEFomUwIT//98QAS2kcHhTiE1NuQAtVtTpimt1w8C9YGu+9U79ZU/NdEa2RENyG3JvO/6xGBAAAAXUGb30nhClJlMCE//fEAIMjr+c2OFQnxAK5oJGJEABt0Vrh+JuVjREWr//WWmAxSJGAyP1edq39DI2E/aBpmkn6jlyWaKitbQt5Rmrucq6KA4G4B6RCyD5sO2qnPNwAAACdBm+BJ4Q6JlMCE//3xABLObO8+6EBNMHUQgBMee5WtKEy3ZAyjAiEAAABeQZoBSeEPJlMCFf/+OEANbZjYQhxWzz7dgsroAIUvoHdlN4dTEm5aoc4SiT7tD/3a2+Sz9gU3EVg5ZvWlzf2aLfMjzzBhnWUYq5CChEvTBs5kQfVYZKlsQZppRLV7NQAAAGhBmiNJ4Q8mUwURPCf//fEAIMajIiUhYyDv+9lhsbDCcAE4tLiYwBnvYfgcxTzGNnOnLBD8uaeZcV5MbXGpXJVtf3LOi1hegHd1IoQdypwHieNRHZ9173Q/ABTbPfjh/NpsXWbCZv2SQQAAACIBnkJqR/8BxX6U0rINRpGW6M8tlgANgjntclPmkbC4McypAAAALEGaREnhDyZTAhX//jhAB5NFeyoTYgAufahc7m0yWcG7SW1FN1LaPDnrtvdVAAAAcEGaZUnhDyZTAhX//jhADW2Y2EIcVs9DNh64bXDsR2uADVaWcZ/LqcgcZcjG6T8bhApluDUFPtEYKexR0r6wjbFcuv+DWtT0sqWBB8GkPdSb96kP2NevcWYPI7hYD42Wtw5x6Va5cnT6E2gGuoLuwEEAAAAsQZqGSeEPJlMCFf/+OEAHy3/mwi3JDVY+0yrwAA4s0FBmdyLuuTIUSDz1UoAAAABuQZqqSeEPJlMCFf/+OEAHvxRIWFgA4Nah37BsMYZNguWmzSGOPqNm/4EFrnmwz7uLpa7jWMODonzoEm0gk8UF1RFO5Mp/dTgdUF4D+FfEunbcseZG6OUF5wlq9NWc3/NVUsU2f0hktyeZxwYNV7kAAABEQZ7IRRE8I/8BHgo5z5FLQMz+I0voyhAAhAnRE8c1WhMOQhRqamyBCWN3uqnPpO/3Y3Z9MBAjy+Q6PTnx1Ju4yHqw1GEAAAAcAZ7ndEf/AcSH1hU4U78IkfeuvgB+BQAg3k0SbAAAACoBnulqR/8BxMlGVG85ltIZBdRQEACbf8Em1qfX1fvUphe9N2LYeFxZwWAAAABrQZrtSahBaJlMCE///fEAE2hK1xTFfACSo+KU/BOOrNP+RTKvtv950ZenshV3YlLec8njfwgEW+neku/cFVLr2eRuLftoyg6p10huOVK5toWMrcX/6jeNSXxAsTKiMbbX04ZGzFax3+sN27kAAABRQZ8LRREsfwHF7t26piFKnFwLhz4AC1rSyHye8iNbJZbnMp9yUjVu5Vidmnj0B2FwdqtUmIG3laSC3QrBIazC8SlfAAUJRNk752TJ6DR61vUZAAAAFwGfLGpH/wHFfpTSsg54tNzfjuC2WELhAAAAZUGbL0moQWyZTBRMJ//98QAgxqMiJSFjIO/+aAAFdGZw68GxKPmUe+0490tQX0bbZiIFmkIw8f2UmAkd2fgiomu/sGlEyHCIUXNIlgEuj6LPX6VBx2jcp5qfDtSK4ZtB+gX9QNHEAAAAJAGfTmpH/wHFfpTSshAHqplKUNXyZwgAhMqzQSJKeLdXgSrlbAAAACVBm1BJ4QpSZTAhP/3xABNObP/Zf0mccgBarE6kpmMq9/TtBdFpAAAAWUGbcUnhDomUwIT//fEAIMO+N2bStb4x5AVHLSNeAAE1k3HF4YM9zhfEHVM/PFoYbP8fs2OjKGL+9jy2X/8iaUWpJN2Wl8Nmmh5crwKJY1flpncZbmXmCbfeAAAALEGbkknhDyZTAhP//fEAE05s7z7pfAFzgBbev62YYXWuzqmV0KkHR6nRh8M4AAAAXUGbs0nhDyZTAhP//fEAIMjr+c2OFQoZmrjJdmMAE45v0RRYU8PgKrsb+ej2/meacCylJzOW/Ft+Hwg6/BMCDMfKqzCC/yxzXF+5JjepFxNYUWWyqBAxKqPfvkINWQAAAC5Bm9RJ4Q8mUwIT//3xABNObQHUxIAJwo/rIKuqYkb4qESOG41oc/vFburdfbLAAAAAakGb9UnhDyZTAhP//fEAIMjr+c2OFQoZmrnfPvfGACcc35TBCx4GAJAei0aey8GdYek74ihAtgf4Vw6z1Qejxz1MRuCfrdMjeow170cFGtF3TREkbk14ZmaMe5hGZnWCq8KtUwZoY4YH2VkAAAAtQZoWSeEPJlMCFf/+OEAHv0Vzh62Y2XlABOq98w8z9DepXpxJqW29PDn/4MspAAAAYUGaN0nhDyZTAhX//jhADW2Y2EIcVs9BocxLkDaSoASdy+6xbg7mf4CxveZUnD4cINT/faG6tpowq9SqQPS3UfXGD/7zhs5BeFHVDRzQApVq8uFncTpIV7kfWcN5AEur3AwAAAB9QZpZSeEPJlMFETwr//44QA1s7Zi+e0Jn6FdRY2oAh6sVuUnGbylNlB+z0VwR4ELGV++0grOSl1+r2/u2EZjLzP+858FsScCNiCz3QepiCbT1hcFyX1ipOooqvC+3U7B7AaKbs7Rlt7v/sDvXdBwLfA77ZOiHzdtfImm6a4EAAAAkAZ54akf/AcV+lNKyEX4uwGpcpC3JSgA+27EXnavHk/WhxzckAAAAYkGafUnhDyZTAhP//fEAE9IdBd59jXgBK4kR7gtm07jo2FMcDF8ONBs5jJ/XCVqUUwDlicDdFVrA31KdujZg25LtpM0P1x/GzKf9hKyrFaZMHLx8sEN0H5hJo3FDTBa++3pBAAAATkGem0URPCP/AR4ps8HJ8NPUwzoIIKcAH36vCDlq4oqleKeUeU/fBL2djrRUVYtNzB2K4DFy2AepxkEIPRd0l3Op+l9UafdPiZHa8TGBwQAAAB8Bnrp0R/8Bxa+KQwqwwQUNygIAENCtBmzy+mHm5M2OAAAAJAGevGpH/wHFfpTSsg/xtNzbcgbZpAAm//E37S9bZZRZc50NQAAAADdBmr5JqEFomUwIT//98QAT2BT21QA4WwU4mEAFz6/rZytSkPIvoZcXOV0udCZWlD4ii9YiAEfBAAAAZkGa30nhClJlMCE//fEAIMjr+c2OFQo4JDGr5XOAGjvkcV/3qbU4VLeOCqtD+dfroh3pVXIx9zf8ONHrbikFpUaJZD3HAPuhqYwg+qRv37GD+5Lq+vN73UUYofzohJV4MwFN5fZsgAAAAClBmuBJ4Q6JlMCE//3xABPYFhJItFhNMHUQgBarE6kpDJzjcz5BPWMv9wAAAGJBmwFJ4Q8mUwIV//44QA1tmNhCHFbPRq6UZYKFIAJxyMJ2dIGozfrOx7PoMWOQmsSUswml2SN4jLqALFSxI2Bm2zEeFAtaGykcPVoVnDNK48hexZBaus2oo8iuR5uYPZRmdAAAADdBmyNJ4Q8mUwURPCf//fEAIMajIiUhYyWUu77PVJu/5rQgAtFTakjGeEBN7bvy0v0dfPH1QTTBAAAARwGfQmpH/wHFfpTSshAGIf0ADnCQAg5spItA9zsCnZeRtlXWraQZM77m/pMPDlZIK9u+i/5j8ye7PQogMb0kGfvI+u7jYXs3AAAAJUGbREnhDyZTAhX//jhAB+7IWGbV/WRsDSgA4q7KnWOpMm2SpCEAAABtQZtlSeEPJlMCFf/+OEANbZjYQhxWz0Wb2lFp75ACXVkIn5R4BuMVbz02ZY1YhbL7vh6HVs+ZZZqK1xlt29mo5KwMrTm9xE0deCxI2iXESr/tF4de6D8fL8eMG42zBHHsdQwFrE7TiQ6wCVXTXQAAAHlBm4dJ4Q8mUwURPCv//jhADWztmL57QmfFb7D3gAiC5VPK4um2n8LN48yPPjyvq8aFs20spVIOyCu08PyrCckjBOXowmUgdabX63GBVJ92SfE/8MftOyYA4wlClJDFsJ3nD/C4mQ+DFbzyL5W8lArs5zzq1LdGGYLIAAAAJAGfpmpH/wHFfpTSsg/x8uJL26jrcAAftb+qjLEEQ96Wpf3vwAAAAGxBm6tJ4Q8mUwIT//3xABPfayrF14AW6NwL7Ydx3reICXuvSFKl7589Y6m3+rYZscFMgeA++VqGw/mVtG83JDiC9aHDzn9IW8wdC5h4j07UVQPVMs4/xjtHJdqY27nUCjbooEwGhAn9h8H43EEAAABOQZ/JRRE8I/8BHimzwcnw05KD/5m9RgAPw0fCEaaHOdJ4wnr5GacJtcbWVT4fGoQyywMo4R3O8ywlVAxFJ39m5pHJ7QlIgwDnVaFKie2CAAAAHQGf6HRH/wHFr4pDCrDEZYis3E22lwAIfKwvf9fgAAAAIgGf6mpH/wHFfpTSsg/x8uLbQ9C8RAAmdZnROZn0xWTz/0EAAAAzQZvsSahBaJlMCE///fEAE/5PsHtCq/+IAKDhAl0ZEvlbXsFVXcAnMuGpuYnUiB+PsubjAAAAWkGaDUnhClJlMCE//fEAIMjr+c2OFQoWwlgqSywAsdeJt21prmgvkLGZTtD63Z6ZZT7AMShbi90YIezcrDkT7EKMHkt8owZZdBdMjJ4pHzAUROyFTB6GDI2VgQAAACJBmi5J4Q6JlMCE//3xABNlcmTvTf4AQnEPhE7qvlzqHcDAAAAAYUGaT0nhDyZTAhP//fEAIMjr+c2OFQoM9VV/59mxAA+hu8Qdw/+iHKiRavX/+L8h0pbNdPpkD7FcpbjKUtXksxOcRS29kReT4X24JAojxfqf09DGuYaZFI5eKGqBkiIUl4AAAAAsQZpwSeEPJlMCFf/+OEAHv0pbKhNiACH3nV91cXZdOV+fKOPs75ULKfSzi0EAAABbQZqRSeEPJlMCFf/+OEANbZjYQhxWz0c0TdRw1+LnFACD4/vP2TZt43LAuZYP8tgRlVwkyS3B1dVIeh0HmFL2kpLIv0gbs99T+s+vsuEp1YsZ01vLoKHYUlZ5swAAADZBmrJJ4Q8mUwIX//6MsAIAF+kYAF2b325MREqd2ZDAtmJN2Q5avM4OX4q4HOPEnn3E9FsRccAAAABlQZrWSeEPJlMCFf/+OEAHy1VwdH9EUAEI0JWkvTG+JqeMs/VBfWpug47iAwwUjjdPLCHWvzDJYTEpAIiHDT2wYrc82zTgPY8XjaI+4UDo9wF/1yUuqioorcY5BUwssYQFQZgPBMkAAABJQZ70RRE8I/8BHgo5z5FLQK0a9ZdQAlsXywNoavP31hTJOC9H8crk9KVf5hsV6A2l0WKQh0MfCusmKLyMw6VmVZzX3vDv/fKrXAAAAB4BnxN0R/8BxIfWFThTZ9/Uq0YdqsoABDOt4OwNS3MAAAAfAZ8Vakf/AcTJRlRvMo8Zfmxc4W9XoIAEPlWaCOaOlQAAAGtBmxpJqEFomUwIT//98QATUtiKsyAARB5b9YmLb2rtpVKDNeyYYDrz+/NSOyRICs6/j9WXSMQJxHwt/FwQKFcMbnTx0qPjaYHA3IyIxn3zNMB7tczrRvN13aRqfMHpSdvZsiV1af/o6b43kAAAAE1BnzhFESwj/wEeKbPByfDJkfWUqv+gGnAB+JcLFDbXUbTb+YGLwDdreUBtO1354Yqz4lNB79yV8WvgatX+MPb0t51z/PSeHSms0lU2YwAAACQBn1d0R/8BxIfWFThYyocFq6WwgAg9rasWu8ywHsnd+3iM9+UAAAAeAZ9Zakf/AcTJRlRvUGjxUuHL+ACbaj2Y2rVcQ/ZFAAAAdEGbW0moQWyZTAhP//3xACDGoyIlIWMfgBHEVihIUVtlACZu67CnYmYhYXSgZ9Xku3hbH8iSO4hEtMjlI23AihEqLv3pjm5WSgosizVPROxK5HYePAjilTyK8xQRGG3Rc2W732L+YIXY/265ZDk1Kb4SpI2rAAAALUGbfEnhClJlMCE//fEAE26JsHtCqvq1NeAZgG+a36jbNRdi5s68OHYFNtecMgAAAFpBm51J4Q6JlMCE//3xACDI6/nNjhUJ8Q6TDsZi2JiAB7ynEDj7/FOT94vv70d2bMV2UZKqGHnArMf3TDhi1Rzla4pIiPPIT5V51ydzTqaYyYPcM+lXVKtE8nYAAAAhQZu+SeEPJlMCFf/+OEAHk0pZWznKm0AAhomMLkCl5jjVAAAAZUGbwUnhDyZTAhP//fEAEu4g40mW6kAEqSIQmHAxoDCPQbK5Ts8ZjNAjAVzA8hFxnJDbxPEUwVnEG5RQLkgOzX9dzG7Zh0ju9VFD63KGxzAy1IobF/OQRrZl8l8Ai1huAre7RXVAAAAATEGf/0URPH8BxbiTleQKU086qcRoQAPbirX6HYq+519LnzBvoKgJdFqfW5rPZKswuZEPAvRuPeQkddKiLEIgU0okvzILs2t9KkqZ5KUAAAAlAZ4Aakf/AcV+lNKyDUbGUOCK91FgANa5Ovk2osYHOHVf2z1hgAAAADJBmgJJqEFomUwIT//98QASznrvPuir39ACZcLomLQ/Dqe56keaXtEwS/FtmtXOkh9giQAAAGhBmiNJ4QpSZTAhP/3xACDI6/nNjhUJ+5q407lK8gATjTsM24TRyadQr1046jPsNWPHyCo/Q080zGBG9NhZNdMW7FZWy49mv+YD4703hr8ukSxawHNIJqNHZxUAbrxOqkcP7zyYNv2k7QAAADtBmkRJ4Q6JlMCFf/44QAeTSlOAbnK9TwAXGAStHIQ4bOGrVGIyXhvCLh7Vu9Fu8hlx0QwFxyFv02t4aQAAAGVBmmVJ4Q8mUwIV//44QA1tmNhCHFbPP0eizVKACUkh2tJJtmgq/A+M5iFPq3kHlvViyLMtlnw1iXsZbPiTd34qB0RUfFeKJha7wh0j4DVL70JS3mgHiyrWsOYAaBBDXdF7SK+23QAAAHlBmodJ4Q8mUwURPCv//jhADWztmL57Qma+E1Kbq+lACBZqYIWe5M3+CtPN6hxb8PnIHQyJrIHWrp8Xq3R1ZPXUekwUxmgn5LpZ1HD1kY2wgzN32qXpNHx0lQ+7j3mtZLj4f4l0rknb0wdcbnzQHCg3sKKjVjoM/n9gAAAAIwGepmpH/wHFfpTSsg1GxfhL5CjrcAAftb+qpQhEPeljI7O4AAAAbkGaq0nhDyZTAhP//fEAEu4g4Eb3ADdeW/WTL02dWyXOosGzbakYumwu6qG3KdIzV38iLJDJGGgLtgjLQYhSRXf9RbHLThiPFAV3h6yHWqbXiff0kFxGL6j4SC5J3jc8jSLlCkTp5EAv2kYG5fwxAAAATUGeyUURPCP/AR4ps8HJ8MYXLGRP3V1ACZOWBbNND2IqiRWUmCmmHG1lU+ILUaT+ToXk3zECGCaQaEVSf9ot4nRkkJTIKhMydOjsfcHAAAAAIAGe6HRH/wHFr4pDCp6UAQxcr2gADVM72mYwJCzBZtXgAAAAJAGe6mpH/wHFfpTSsg1Gxfj8mTABMtCUUfpn90c9YcdNYrkZoQAAAGpBmu1JqEFomUwU8J/98QAgxqMiJSFjGvJ90tswjNjtIAEjfv8dwVA0EF8hZhzQ4owavj/CqeBkTjeBri3BZcWTEqk9YKS+3q/LXf7b5nJ7OoqtxvkJF3JQhMhSXLB0QzMyN86DlitofVvBAAAAHgGfDGpH/wHFfpTSsg0Kj534+vMHAmCyAEJlYTA4DQAAACFBmw5J4QpSZTAhP/3xABJlcmTvTf4AQmovr14a3fREHhMAAABeQZsvSeEOiZTAhP/98QAgyOv5zY4VCd1bZyrZsQAPxVOsPbnBKkuNl4AjD71dE/8sduPrgqODC0X8cgBtvGQc0tQTPeEv1PSP7Tmf4pO5JLkCHXMvQwjMNZ/UpvXo9AAAADdBm1BJ4Q8mUwIT//3xABJOewHUxIAJnaeIV1bOLW1zGMzb/sEwbD77R+wMyTrWgYjA54BAkdEpAAAAWUGbcUnhDyZTAhX//jhADW2Y2EIcVs8783caLiLrABsU2DHPjAX8blgXMsH+WwIyq4SZJbg6uqkPQ6DzCl7SUleIlIBU3aG/RQKQmTIcuM7Mf00uYdwyR3guAAAAOUGbkknhDyZTAhX//jhAB2dK94ACpNpbYq9tvJ2wfNWvXnjYFF4ZUxhaHm/B8jcYHMltMKJR16peLgAAAFVBm7VJ4Q8mUwIT//3xABJuic3cAKtmQXqul0Imx39v6k8f54n/2lN+T+c2gj2KkrropVjksdyDv/Iq5xZZg+slzY2PTvT7Ehwo1yhMWGI9K0P0vbfBAAAAHEGf00URPH8BxbiTleQKS4rSJMkfDAAhMqzQRuEAAAARAZ/0akf/AcV+lNKyDVkqHCsAAAAbQZv3SahBaJlMFPCf/fEAIMajIiUhYxUcLwU7AAAAEQGeFmpH/wHFfpTSsgwgkasIAAAAMEGaGEnhClJlMCE//fEAEk5tAdTEgAnGnYYNjK9ZrTvKV95yN63H+rZ8+PN7E6LkTQAAAFxBmjlJ4Q6JlMCE//3xACDI6/nNjhUJ27e7IeUQAPxTAMj//aHhOH7CVqmwND27D9XCms6T12KXtBPZHD1uVlixFYNecF7TJDZF5LbJ97JqN+PA49QXEBK1ajjR6AAAADdBmlpJ4Q8mUwIT//3xABJObQHUxIALVl+hFmrBp+bxl42/713iGpgbEn5akCjoAn1Eh3Z2ntvhAAAAcEGae0nhDyZTAhP//fEAIMjr+c2OFQnYM3G+gBNXj311LfQ/fc0cvW53vGvMut3UwreRlQHxLyXSZsUqNkqoAHhRgeq19RcSpVf51814Xt9hQmpOpKEm86Ngg7/neFq8E2zbOmYQ75mTbddFSGrPaqEAAAA/QZqcSeEPJlMCFf/+OEAHn3/on3+OT4lUAIRtHY3Xht/UohrKtI9AWvF4gq9sw1lk7QMrEeY13y7ElZHlPNSAAAAAZkGavUnhDyZTAhX//jhADW2Y2EIcVs86rcVozJo9fOMrABskrIIDPBervo6DXgusenffBnJVAx3OVn1Ox6xJA2YmF5c/xbk0c7CXaBTBtwdFd0lQtG0qZuVH9kpHMgM8THa+J7W1UAAAAG5Bmt9J4Q8mUwURPCv//jhADWztmL57QmbGJeBxjfACuBY/9xhb1s06RNTVKaRmAQcfk2ZfdpTVqk/BE+J0Xo2BCb06gI7uFXKUsUD5N2OQGwPSdFhxZ2JkNYNfWwm+sZzBjj4cwxsFSPBFIDMfoQAAACcBnv5qR/8BxX6U0rINJAaWKIIlQAJxerzZQ27gI29pdRcKOc5Tsr4AAAB5QZrjSeEPJlMCE//98QASzeY+nl4AV00EBRQBJi67Y7BpB0sTiPYPaT67NnDUE2RK7wt2TUUaOAZThrSjzXoSkPues2K2Kom53cGYi6WM+R4mjXPAPIH5nNJS3D8X4WNzas0/49Djtzo2DtXv4UaBXTmCzGkh1tzf8QAAAE5BnwFFETwj/wEeKbPByfDGQ3HqfOWZgAJ26ZUdT9Z+zk6Z6eqkFEJGH9RRFl1Y5DFDLQUTNUcpwXxibV+QGsGO7g6ajV4zxVx6jJSh1eAAAAAeAZ8gdEf/AcWvikMKnpEwlGkKR4VpZoAA2esuiV6bAAAAIgGfImpH/wHFfpTSsg1Gj/LgdG6TABNJVmgb5MMYSWMi8uEAAABBQZskSahBaJlMCFf//jhAB5c/4F4jliAMcABCNCVoZuJ5kNamxt4VE5bHcCdkcFMJtSrlnvPdierdrZXMWCP+ChEAAABhQZtFSeEKUmUwIV/+OEANbZjYQhxWzz4f0cu2ZUABK/K24A82mZs6XLSv+QRMMAvJkzKi5KvL8tD/uuDZlpNTx4BZqRE0GifaWU5m4vTKjZMn+2x+N5IRXCZTdQiPtQy9bwAAACVBm2ZJ4Q6JlMCF//6MsAHy7TPZc8Q3LrAAqNVvu9pxzqCbp+eAAAAAYkGbiknhDyZTAhX//jhAB59VdHwKaQoAOHFQ3B/P7GQQA4nipuXT8fG6lqCN9SH2CFLys9rgVfJ053MgMIjavuM6zZcOD/oMZlsOAS95KHTBfiflQTMWsK//vKfDpDgvX+QsAAAAX0GfqEURPCP/AR4KOc+RS0C9ARWrhj8AE3A6RzVdmP2n0qiIA6WIF5C4z0RRHSE99jc2NYtBSsjrq+sa7FhRkh56Ey4KPei7/q8SKQYbxZjCUHvcR/ds0SWHh6cOQjaFAAAAJAGfx3RH/wHEh9YVOE8otns2+v/POkIAITfjMWXYIG8dY2uIYAAAACABn8lqR/8BxMlGVG85SBsjV4FuEWJwAQpSqHKFQZ8YgAAAAHxBm85JqEFomUwIT//98QATTd4cTc6NsYABysFCjaQIkV3zmKtCb9PubMhP4EAsa4Un///7dWO7erXg0sONUPaJiSHFTPFVDk7FfnJmud+snKkX2mxJIg85NAV46GrUmzlAIuyfHnWm0u//pQNoHEHmECmjTbrrFHbz3O5BAAAAU0Gf7EURLCP/AR4ps8HJ7HA/JcvbfH6YANSjGCRtt3xCpQNQX0jJjBG3Mgl8TqLnISCSpOpx0RH8Cg+Fsy1upziT7OAOCa6R2qLZJMmj9/Q6uOPTAAAAHQGeC3RH/wHEh9YVNiI1ofT0kGkzQABs9aAsXBaBAAAAIAGeDWpH/wHEyUZUZJr5eZrBMssxZf91bAAQ+VhMDvJIAAAAdkGaD0moQWyZTAhP//3xACDGoyIlIWMfERXsIALZ5b9S/7lb6Z46QVSt76XGTX6v+NzEUF6Mh8NwUAruGL8Mg+6tQeC+t9zgN6S9o/J2Vs+Gc7lbFNOnmbbU6pG2KcsVL8I3ZU3GjNkxLMtPELoVjui8pT77eMAAAAA9QZowSeEKUmUwIV/+OEAHv0VGXnwnZKAFrgE9d1+pcg38fr4BLaUYcdcCcIz89+9AnulSXtmH29tvL3RGQQAAAFFBmlFJ4Q6JlMCFf/44QA1tmNhCHFbPQwsQ6Gc6UAIPrSnbXvt3rXvHLWTVitgkOoFw1GBA/XxB9P3m1fV4GgKOjClITSqVHk3fx5O+k3e3rZAAAABZQZp1SeEPJlMCE//98QATbonN3ACrZkF6rpdCJsd/b+pPH+eJ/9pTfk/nNoI9ipK66KVY5LHcg7/yKuSNu5dR24tYNdc3MxOYs9SQvXHvS20UrCF3THPYPvIAAABSQZ6TRRE8I/8BHimzwcnt+Ck9izJ4YfwAlgUzNGlh94zxpzxFbsatxugIwA/ar6mdxmSLQFi2hctoATnXdl1wbilIxG3CCKccQ3KUcuChTeKZ7wAAACUBnrJ0R/8Bxa+KQwbLLSsZqOw4AA2KwZzk98+x2NlJdn6MvtdUAAAAIAGetGpH/wHFfpTSsg4ThrFGPsXT1OqVAA2esuiVbRIxAAAAZUGat0moQWiZTBTwn/3xACDGoyIlIWMg6m4yhhRgAnHKqq/W2PRgnl2DsToxtXqnEshsgjMBdLlptkABaT24wK27DKWRjHMZNLDvFjC0HMOEEEfZU3E9schcIiE4N4GIKhZr/VSBAAAAHQGe1mpH/wHFfpTSsg54sNgwos8e4wAhMqzQSZ6gAAAANEGa2EnhClJlMCE//fEAE05s7z7oq9/QAmWnYYNjK9ZrTvKXJ72h2knSnVs7ts9ws7KdgOEAAABbQZr5SeEOiZTAhP/98QAgyOv5zY4VChUAKxlCUAD8UwDI//2h4Th+wlapsDFY0xEospqXM0xjAO2IqcKr7oi4m1761mNqQfVI18drdzS+6AscOfDf9igXh6Oe8AAAADdBmxpJ4Q8mUwIT//3xABNObQHUxIAJnaeIRZogKhxxjM2/sxLeNvRvXjJnaz7QKjK9UPvj+haBAAAAb0GbO0nhDyZTAhP//fEAIMjr+c2OFQoQ70q+gBNXj311LfQ/fc0Z8vtWfR501Ylck25/SBWX08ICzh9WWr886mWeRGfDRBl+1hSo35q9AonQD92YD4pjEnHJLy/Slrp9O2/ND/CQvJdXZX/5ALOA4QAAAD1Bm1xJ4Q8mUwIV//44QAe/RXOHrWBcuACwSIm6fyXrm3WjNWJ6mBoZh0RKTw/Nzr1lU+mUIGpEcbqX9m2AAAAAY0GbfUnhDyZTAhX//jhADW2Y2EIcVs9C3F+VI8CiABD5DQTt2suVSxeuI0LDV6ZuDYCIzFqliGIhKvcviWcwiX6VR13KIvpqgewD1OWom/ZDvpvpfgARuPd57KuVNWo+uKGysAAAAGpBm59J4Q8mUwURPCv//jhADWztmL57QmfoVs0oAVwtGPANDeRcPcQPSyqSx8elqxoee6Jpk5C7arEl1s7Ei/GiHtvncevahp1nW4S8JGqPZwR4z4i6V3XL7QUXHXla7eNm2N+r0S4nBXFbAAAAJwGfvmpH/wHFfpTSsg/xtNz4GTABMr1ebKDEX4eEFanx4ifMz6x/gAAAAHNBm6NJ4Q8mUwIT//3xABPzb8eN58AKxtkIGsi2ZZKyhkHgkCi+wh0b1ArUCgn+OethPQDNb1g+5htLRJ5iOser5HgKDne9khDNrHDSg1f/fC5PQaVNjhX4FrQypu3t+OuLW6gVHaEUop2ogwp53NOiTjcRAAAAVEGfwUURPCP/AR4ps8HJ8NOFWs2odZgAJ2vqo6n6njqQCJp1Mt5YHPje7NRXY0gGtYgK25LEOSUipwZ5kbX0EsxmPchtghZl1KzwpZ5sitD89/zPwAAAACQBn+B0R/8Bxa+KQwqwwO3nUIZpC6rpAAm9k1dTQ0jfaFyau+sAAAAhAZ/iakf/AcV+lNKyD/G029aSRM6X1AAnUqzQN+COIyYhAAAANEGb5EmoQWiZTAhP//3xABPmrxXt2ttcBAB9zE6kpmLlSalrayb9ZU5lXs3tGTi86zx/WD0AAABbQZoFSeEKUmUwIT/98QAgyOv5zY4VCiy7WuFo4AWP1nlkFf9yW5YPKOasvMWbSvDqx8peERdDbgp+2FeuPTNyNIOZ5EnhMA6I8c5ixt8nSwhRbBHyXp1enGIgrwAAACxBmiZJ4Q6JlMCFf/44QAfrRXOHrU7kuppsSgAnVS6mz8Q0UfZbSOVE/QVa6AAAAHNBmkdJ4Q8mUwIV//44QA1tmNhCHFbPRzEvGY0LWADYsi5qibJUbYW7y2Lf2DlaWV6EKIfYEX/sLjr1kvfQQV3jdarDNWt5IeJL3OScO7H/g2clZudNsWfPDui0aI3bd2WS7ajh+Z6KMpa1Y9yXhimVs3d6AAAAO0GaaUnhDyZTBRE8K//+OEANbO2YvntCZ8ZXPxOIALiyUPXY+Z4MQVEYH1nxexiExA8VsnnUV41sC+2dAAAARgGeiGpH/wHFfpTSsg8RX9LL3AAXqSZujsmGTdhDKk2KAZz3VwwdzIpmyUpcxEPpze9aCLfKWi7t6Gi6XPLshx/o8XPP+gcAAABoQZqNSeEPJlMCE//98QAT32jXqEAEYgymQ5CiGlUR9p+D6FGLa6GVxzeXA3cUowHpv0t11guGxOrCWv3EruMV9Rw9czy0SitMUAq1jVcn4np4DtEa2bht46rTa/FY63dRK9fFCcJVbsQAAAAyQZ6rRRE8I/8BHimzwcnw1P7cX6PRG6i9lWAE0wQWMD21tVwuhhjfrWlt07tsuoP5n4EAAAAfAZ7KdEf/AcWvikMKsMQlSAa9fHkagAbPV662j16PfwAAACQBnsxqR/8BxX6U0rIP8fLi2/LteqABD5PRPRkt6DGKNdvl0NUAAAA4QZrOSahBaJlMCFf//jhAB+tKQybN/KlAJhqkVo595GUESWh/xdCkcx5ybBASVFfu60wSzLKPBIgAAABuQZrvSeEKUmUwIV/+OEANbZjYQhxWz0bxwGTDolgBNXb3uSGgZnpA9UIWIchAhUx6lEDZqhUxLpGh/jZLx5oz1U3TyYWNZp/b0qw1jiLnv42gyPaU1Q+UJ/pGk1o5/uBdg2jgOPbkgiQDqKIOTXAAAABqQZsTSeEOiZTAhX/+OEAH93/mf+JCU1JTsoANi9L3wfG04F03l1uF+RxcNmcFU4YK3+1dG2WlCUgwEceXGv7WiAsMPqLHy7lplyz7bw7pNRTFKZeV5BGH6F6AJKAY1idBP8bLPlPvTA2T0wAAAE9BnzFFETwj/wEeKbPByfDQlV3o0C5wAfguXotwpAlsKgNats2qUdBUAreT2HZ/I+LjgjmYzGeS606bcq11gPTMK8yAGHY9IcxymZi/vj/AAAAAHQGfUHRH/wHFr4pDCq8W8Jwf7XFpnsADZ60BYr3UAAAAHQGfUmpH/wHFfpTSsg+jBVAx/sBRGAADZ60BYr3VAAAAIEGbVEmoQWiZTAhX//44QAe/SllbOcqTUAHM5MFKumcGAAAAYUGbeEnhClJlMCE//fEAE24g4NuG6kADajqdYTIIeI6je680EhbatNFdEmqxasjQANrGSxRN+kUf+4k50BIAK1+HzMlmJFB+H+ZK379sghUsBY+M/BSKrOFAzeKTZyyPfxEAAABQQZ+WRTRMI/8BHgo5z5FLQM0VYN2ACGoVpgEcJcwZfXfzk9Ggd0zNtPCbX3vREidlZu55UP5WpJAo8hSh91D/btH3h9l87uRmbUKbo+APji0AAAAjAZ+1dEf/AcSH1hU4Vi2JOtnbUm3YZogBD8keCQvDXgVtDUAAAAAhAZ+3akf/AcTJRlRvRvF8aEqB53VFgANnrLoliGCSmVuBAAAAbUGbuUmoQWiZTAhP//3xACDGoyIlIWMg6m405KnfGACcc79YmLbrjvLxcLhmbU5db43WbIIRjL1mKU5jozMb5F68zh6P7leiKmN1ke3eoFee6UQ80bzPiQhitzlcsIBUTvMPV/l989h3dcK+qkAAAAAoQZvaSeEKUmUwIT/98QATWP+v6Dk8THNvAAb/PMZIlzVpjrluC1XLgwAAAGpBm/tJ4Q6JlMCFf/44QA1tmNhCHFbPQzN3B0f6BAAQfOkuWU3myAVcgIdncJRZE4KUCKOob29qOPPsjpybCJbwpcocWIq7nMSX0J7K6A7QwofV8FdXDHnVhsFVIbWFMWVT2SEiAjZaqVtXAAAANEGaHEnhDyZTAhX//jhAB79KLnMbru9skAOMVJnFf2UjGWeeFeHjv+lVvp7L08ipSpn7kyAAAABoQZogSeEPJlMCE//98QATTeGzQgAELMlCO6M59dedhWgLMIsCWGTjJh1PaNtsjzxviAR9jtmmYUwY6MBWecQmu7/SIoZWn0dS6KFHeleS7JPMtMMdyJURe8bsNNVxNra+zTBqqREPjeQAAABGQZ5eRRE8I/8BHgo5z5FLQKWSl1T4wAH4hp7xNDxeNKOO1hfRINdFGmOIjvgZGFPK6S9GFHhOV0MHaom/MqbXdR+qv1ftRwAAACYBnn10R/8BxIfWFThTZ9R7goCABONEFDwK6B/NY/qKivXGcz15VwAAACEBnn9qR/8BxMlGVG83AfkJyWJ+oAE41Yc9zD5jj+uCcm8AAAB5QZphSahBaJlMCE///fEAIMajIiUhYx9hr+aFQATjnBy7+cv7UK6KDcwuakgJwuqfKCn4VjiE9zD39qBWxWYYIplLd1mPXy5KXotH7ThOsC622WnsnI1aNbexnLK798DnqW97zkB2VMwEFiJYbZl4i+PDdKa3JP7asAAAADJBmoJJ4QpSZTAhP/3xABNuiaze4zYMM1QChVC/QMcnqJuu8kHZwZ3r7b4zq9u+Gjv3IQAAAGlBmqNJ4Q6JlMCFf/44QA1tmNhCHFbPP3N1Jz/kjrmAEKYvT7Qj4rOmROqMCYteZ/I3SzSSGRGFDemzluG6N08axQkMWj/tPF2QHz1/haR33L/RQNJoe0v9HmQOho0VBF/q2xyaYCDvM1EAAAApQZrESeEPJlMCFf/+OEAHk0pbKhNiACdZ5tjDhCs8F3vxp6bAx7qQ2wsAAABhQZrnSeEPJlMCE//98QAS1FA3AFOABsTJUINqoHImFPVo/ms4jZdNHZ5OgAlyhvghIcksN4OEiBX8omLTJoWiH12GLKxx0YzcRbCWaNa9PHYqKpOx8DJeBvj7baT7+MEB0QAAAEFBnwVFETx/AcW4k5XkCkzn/Ih3WToIACZrgw7/wHH8M8kO7o/AM6N0xK1wBrBuhyD328WOrMFDQ1rj/72ht9+gqAAAACYBnyZqR/8BxX6U0rINRsdGh7JwAQ2zfTWFb6etjF0BHAdldD1hgAAAAC9BmyhJqEFomUwIV//+OEAHk0pTh62Y2XlABD8ieuPvRMCpasiopS4yFIgv7bGW8QAAAGBBm0lJ4QpSZTAhX/44QA1tmNhCHFbPP3N3GYAIoAE46o7Gcxwi55BglV+l7nsvR1YxMgoXJe2/HnrDXEgl7AnqawJTlYYFkXLfB/K1LlaYmFdOPC3lp5IfYA0n2bMe23gAAABoQZttSeEOiZTAhP/98QAS5V84BIABasvwbNGNzv856r12IQrUJ7ikk39UiWD2XMhmzJiYTkMD3igTv8uj5U4ZQjZoaO2oCgKyqFKHirYXluk2ZGjbG2d/XGfrqGvzfNw9XL4B3CRlYjAAAABQQZ+LRRE8I/8BHimzwcnwx6/SrIAB/50MUOXE+IZS9nDZoklqEl8G7N7zm+Qk1X4c7iKbBYpNw4f/2fCA7B0eZWWJdJ8uikftff+LjHqblfEAAAAcAZ+qdEf/AcWvikMKnpPIiPF18wTkAGwtv9hx+QAAACMBn6xqR/8BxX6U0rINRsX437ORjNIAEM8mjaBmnHyYN5DptQAAADdBm65JqEFomUwIV//+OEAHk0oucyZa5IAvMxIsXGeVJAgrhmyWEV513cEG804qnqa2fwNWL8n/AAAAbUGbz0nhClJlMCFf/jhADW2Y2EIcVs8/OkufEmEsAJq7e9yQ0DNtl5A221HIQIyV6lEAr+zHyn/jPnxsl8AuAVwjnFMMIDavq3y4a0wJKUKOqL6dHgXM0tUjTOT5+7kQsPtrN6wGvAGjdO7oH9gAAABrQZvzSeEOiZTAhX/+OEAHn3/mf+JCU1JTsoAM59jOabfakiGoiuZSom1u/xIi5WbEfsXI9/aL2tFrNqYaWYD91yz6qJ4V+osfXTVQ20kKl+Xbm6qu8ffGflGWQacyAJJMvT30hB8mtG37J/0AAABSQZ4RRRE8I/8BHimzwcnww/dbcNAucAH4NFI+N5FDf73LrDQ1hwRQh2m+QtQ9ks73ks1rTx0EqdERjGKduT5dv3BmICnKx0Sh0+c23hgcIbnlfAAAAB8BnjB0R/8Bxa+KQwqdKs8JIDVxaawAAQzreDPwuBeAAAAAHAGeMmpH/wHFfpTSsg0KkSw1OEIwkgBCZWEwNj8AAAAiQZo0SahBaJlMCFf//jhAB2dKWVs5yptAAHVs5QIw2C6AwAAAAGZBmlhJ4QpSZTAhX/44QAdzVXBtw2NQAbUdyVpMIJGA3soWRkIPQzwDU5K9AWKQgf4cqzZyKPvvIL3famUNbL9bR029koZ4BME0yoYggED6Lr/R6nD6Zw8zwiMfgnfTvUVivhILgDEAAABOQZ52RTRMI/8BHgo5z5FLP4mdrmxO9uc1UuAEE5SKvmsmA2bAQXkShIFSScWYyqjPxKttLE4znwtXc0RNmc777krjELj2ULs8aR2AKfczAAAAIQGelXRH/wHEh9YVOE9fwXVndLBYADaCAidt1587cNfmOAAAAB4BnpdqR/8BxMlGVG8ZzzWBqY5KgAbPWXRLEMElMGsAAABwQZqZSahBaJlMCFf//jhADWztmL57QmYrLitgc0AFxgErPkwfau2ru0u7Pef3yOHfg/E+trBcBts3vXpypYuGL4xQaapH7yynT+ughOP1u9bva2NZqOEGel2Fg6UZjLlgHffG/jTVxO0Bnd9cwjbVUAAACgFliIQAN//+9vD+BTZWBFCXEWT8F5+VQMF5vuZFk7pdZ9YolIzSsUdXGSbr6zhe+jZBHHCXxH4OEq1lgjjuY0xIFkUckLZvO5zeUFvELDA0npnNOQYf84uRh+tT8Un+jqcxmMfwiU1m+IVHShY7XJvXf78hciVdEDRNRPWPxF9V8VXRg8tFeSv7gO9N7O3sgKs9swYQZlscv1PmvEEOeEUOveqR/PaDk/eMaZXAwJ6jTuX/V4a9nI6Pn3crDHPU1YSQfo7fEF1dmPDvhWRye3BQYo8YCrQpEAoiceQaEmqnJVCuAiP46jtbcw57NcTVVJhlfRy5PaXEWeng/TtHKLXJ6xsBAUb8LmkMKDMipMulGK4USyn9pkgbyTEAHqlh7E7PXOWXmNOeVHHgvFuuplKUa16XeHlepJWvHUPRblopmc+AXB9MXpkkjLksLnYFABCirP4mjRH55oGdtF2pcBoz2O1T/3SdbCflIbygs714zbLQ8BBXzYIe4bzYRpzF/7399e+gAPuvMA6u68eenJdAtPiKGy7jqi/+y7QfBqGr4FXchpGqdB65JE5oR3yOc+d9f3MS5w0zMuC03OELf6XjL/LdR5Rk+SvymYyaOICzYCkir1+e/duEO6ZAb+axy5ldkcIUimUlz4njE5LXzPOHRgGNY3HnNsQyRKadjwDR0N5ErZo9fBvX5j4Nlon5AvLd3T4T8KXEpNGc4Jl7c1pF5mhfAUmlF/eFRkrPjZTthj4KD0RebdeC/4PLM4UgKYZjQ2e4fcqniZ2Op2oDWIol/Dm2chT/2UZXvZHLYvrbPGLuXgUG3PwUyjTnV0NJSG1Yh/pOMi3UQ/OQ38TX3WcWWGzUo2/80TuOxeTVb4gR0wdgLo/Rc+0yOX8xz5baO/98XyxapTi9K0SHzOggYnP0G5oRaVu76DriBNS6CqC2AxSZtiD7vOCBogq45WjzVX6Rr+ODJN3jHuOtVXNjDshQuzZHMahNJ4XaBL+uQzqq+11vHLqFL2/jZs6cuebqWoVsYVgOY7DrThVhfM2C9rRRlt3osUsFQz9TkPWXb6gha/e6jNzthX8dWUXdi1r3Fit0lTQO3DIBA1tNhMO0+tQCV4sKvtpR0PT6htgDItDJSu+6KPdJIIHrvZPCKVPtCO1CrrGcE2NID7LUgV7ogqCqP87HAg8E6TqVry8p5HavcENsKSbvuukhLGivwy5l1PqC45JP1WFsRIe7XEo+NCAuay1xgqjs6aWzwSPG5QwMQD8VoUZAg6LyNUbIHgQ+Go1pRKiGmBHbxT4ES5M1zYMYhsQuqTDsxPBNQYgoRnjINQzsDQF94TjqHuJCE5JTUkzmBVFT8eXd3wPiZMmlbOUnb1zzAec0BMxS5F5zULygdHhKCA72r5yOFHNjwHozcjWosky5t09Mi3X2BY43mSJbHA/dIX4fUdxbdHoJ4IrqShVyI+vEGIlLvvguxkgWMbAd8pmOwYi/vFXJQAOsyKpLtt+jTmaj5pqEDvC11hn1qs5KKHzEUE4X3em8vDmaRBo0dwSQOWcw/cAL5vJGwsrtLYGexh2eoUp6HRZDTT1b6v/wLWLVmvY5mnbtO8bS58zt/0RAx+lgOdL0RtjSyCFL+cf61JqHIJ5TrUzTKsy93iPQHDPCkxpjiTGkDuh6UeOCvtk7zOmOq9W6bhSml6/Om0+F6yw+4u9PNECNnYeQDesFz49OjQSu5J3uI1V+d0QLhe+BYd7m9bRprSsI7szBqNLIhonfHDDLXc3FQgoXSK0iA9vANAmWyXcDk7lDWr6Q44xw5gjVagpWp78zzpqbJk4PON/2gT2kk0P0LrGjgsU2YC3tAwrucct8Y6dwDh6PTAlXD0dbYF4Yzhbrf7YYZxelSsGdQ/N6HQ+AVAgY3dcZ6JV9EGRYs5/HUb8pll4J6kmwR87ga8in0A2ro7De12rYdNN15tRx9QPqjpIPhyKWTyAQR4VprTmjNn0ACrLptBXOURFVhxNTSbHamyLBdjVG2XELxig21lA70HTz6Wx3jJ3nkpcYlYU+6+rvBwO1g0tIBlJs/CZRNhHDejWWu2FHF3cD5zVjc6xClRAGiTFfZwp08nehr4gFzZSrMAboACEoqBfFx+inP8K4tbpMkKARokjPo6M193FrzmFhTDBG5jFm4NJNcJ2VnX0j8cvL3cd46VWyNvnwj8qdtDyzc2PVI9e2XBWTNzMHQ2N/wH20/wXkrNnB3E23YNLUAqo4SoBoHl/3IWZfASCddgD5S3LOEylHgSbtjDwhbJ8lZmZDqRk0TXhDkJCOULy58zppeDCbt54MFpnMDQIrXNxacjcj8SM37JdoC2Y98T0zWCCOLA5x2LMS1Jfg/ZPTcA7NneTSIuhlhqojmD54bhC/YPPz5kiLwB5tjbtdG23TxrN+VmQJLvtVaHdj1Dt/88PziKXgHpaWTI4LLOHGW5NDZZo5IbNvDpsNz32ZWLXSmmL/gJ9yxcywhfjQzIt8rZiCcSHThxDA7hekAwhl6Zh5zjbBwzQGojC//xjVgMBWaAVRHwnwGP2sU6vA0bU08zcQNU8hSirqztjlUqQUZCCU6YwAri9WHv1nSTQBkFp6DdfwaXyXVsAwkK4vDeh9pnWXwWsnKQtbvLSnh9sCH1zjuwMsOJEAlUYI9m1/Mc+fZNP93ZaHGmxax2O4P6ouu6TmWdmsbFT6gnWZ4dy2RXYnvbPZQU7HbG+aRll5GpxZyOJFqjsS1YGNZ7JkkpHvoCcZQXYR8KJqPeKlOfZ1+6o1vnNtB4gnt7L1nerX2zvUMaQ2uGnpFcxph89Z7n675mZWriD8INzDatQ7ogT3GcoWqzmut0ebZjzKfLm7D0Z32MsnG+GDz1gQk5FqEz0i5C0W9T7VGogmyqrdPJHgcArNET2kPJ9gGl6OTTfze20oBa4jrX8Gyjpq+065AHWrFposakIC2Limqi6WbcDuP1U3A5JtBcTNA/ZAnGDOVe22ggeUwo0dPBJ8hL6ZP7Uv4cLPRHRi3GCB4CLqte1O0bxHrT/4v1N1bXHeOURZ4dxD2GE6vFbax0U01eFgsaTU2WwvLsRCZ7Sp0wLUe6QDzckkbSBqRj9sU9xwSIoVc6s1RtPYXEMb/9AzeIKTCiwTTH2iwSn//nUUSnEuUr4sv4aSW2fFYnZ94lhlk0T3UMvQeYFlCUy2LsiCUhElZ+dxAW9jK56XnX2aQTwQ0Kx+v7/WfMXIxagDK1t5anwTYaRhOzcsB2haKWZAGwNTCn7/TAQUwMtmLXjKuAkhveBQxVe8grnBGEFX8pZjuJysgzIA9c/enxvpsNNJiNJj0ASbtYiCphZiHcuORi1Ph4Wky1KTHljLXlM1GiwBEexWIKmPmTtzY6KL2VJYD1p+EFLfUTHoP4RzjGrKQsmGArcagCvJwQAAAHlBmiRsQn/928EYAWklE0PJl47ywZ7Y8EP33vnmDs41yendvA/Kb6Yuz20jZofo9eMX9EgPA5LLt+SLh421oQPMHJ6fNhyfvRrqLXFqGMcHdIz0w8reO3LX75EbgFlCuUF6F6NspMG8dgLJNlYxaqBznmBM6m7HiaMNAAAAMUGeQniP/wHF9ZuaaNDAA+19n2wEKb0TzstKoe4mRJR/MtTn7FfHv2AJ/4UvT5gZdcAAAAAUAZ5hdEf/A7JJvOhlHnLSV7a0eQQAAAAfAZ5jakf/AcTJRlRRpBihZ3ASGoyAA2etAWLOanFXpwAAAHtBmmVJqEFomUwIV//+OEAbL6hwAJz6Zh7cLLgUiU3MP/RD8kUX/emon+lSoH15x8v0xJWibHUJNr5KwVBOnBnhIE1y9hRWsvubLho9c3gacsM4RF87raI8sQqODv77RQTjejouT5S302QzkP2UPxXaGnVefHlBQ/NoXJQAAAA7QZqGSeEKUmUwIV/+OEAbL6hwALpJ81TEpaHvSh56tF/V9aW3t6f+pseMZbdfViejEKW2i6eikq2v7KUAAABdQZqqSeEOiZTAhP/98QBCfPNy4iQeAloALtwJlsOpbzOwgi5CLaXXn73OBhm6upEKkFcKf1RLRPbT66u2C7UnMvqB0+Mqm8DnniYoUfTgqWa0LL5Nzwbchu1XL2UgAAAAYUGeyEURPCP/Agr8wcDDrzg6AALgvq/96hWzqFhN0WvnHZgk8NLcjUqrvfFcQDA3aL+y+eGKU4qnAF1lERZfPHsuoe28nKYP8RncxfEk3YyECXsDK6LhMRKqgx6nKB//3+EAAAAcAZ7ndEf/AcSH1hU4T4VMbs6PhHOsAEPlYTA2PwAAABsBnulqR/8BxMlGVG8fSBxKo/FFgAIfKwmBsfEAAABoQZrrSahBaJlMCFf//jhADWztmMBd8uJPzAUuBUAHBQSo9c+9Mf5SS5mtsgI1zEdWCg95sC75ollw2TlOY1vCYMK2nkKe0UYqw4bSR2iXRq/fiUEPNz/NP/QHmHWMR8+P4sRdcxw6wkEAAABrQZsNSeEKUmUwURLCf/3xACDGoymHREmTSfmfh8InADbUJrTJ9G0eoQwJqyoyos1ZEqmp+MUY3Kyl0vphFFU6tEu4T94ghYzkvs7DmZRZjgM2Su7QmdzXvjBGH6W2sAtuIfGMrG1CpqK9tuAAAAAlAZ8sakf/AcV+lNKyDUaP8wiJUACcZOtgwLeQuE50QnJFZ/cpcAAAADRBmy5J4Q6JlMCFf/44QAeTRTWUlbpBQAtcAnrhiKcB71rYV3T/KCDea6zPzrgUTu4v5+ChAAAAVUGbUUnhDyZTAhP//fEAEu4g4NqSIAAtQFxMX/ttv3eEHLms49IP+RKovi6VK6R0rSDv/CfbX+FdD7mJcceMTpjEg1/sEo32ovSiSIkoKJAKDTOsW8MAAABYQZ9vRRE8fwHFuJOV5ApOXNuBm+AAkkcoZaqNjFCPAOe/fbtl8htnBqhfAfAX79GXXXh6F+yqIPNdtl+d9cVKfda2anXIoQEoP1fqoQoyoW37hqohTZHtDgAAACUBn5BqR/8BxX6U0rIM7ior9i5xfIkEACHyrNBIk00u0Q6Ml6bRAAAAJkGbkkmoQWiZTAhP//3xABLObP/Zf0mccgBarE8LkgqLWllCwnxZAAAAakGbs0nhClJlMCE//fEAIMjr+c2OFQnxAI4/zkHRAA/CcXG88ZfooTK3t/DLO2XbMOWQsaa3KIiin/KWNhYnw8G6mcmzJfStyu0czgppla/fyBCV5h7XFbgHEQLfi+Mz4n775BuK+aQns1EAAAAyQZvUSeEOiZTAhP/98QASzmzvPuir39AC1vjqY/9S2S/lTtufr0tuts59/O89Ce/9zeAAAABOQZv1SeEPJlMCE//98QAgyOv5zY4VCfRA1y6AB+Kp4g/nio9gWdM65cw49/wk/HjKSn7fu3O07BrYajXDG+fBmx0F+n9knMPx8Q9zH3feAAAAL0GaFknhDyZTAhP//fEAEs5tAdTEgA4LTmzPyahJ8ev0dAHlS06CJCrKAnrA3yFhAAAAYkGaN0nhDyZTAhX//jhADW2Y2EIcVs8+HwMc9JQD3RIAHWf3RZ/3a+PJviWH0Lyvx4FKyYpsOStqlvSKziCEzfLfNFFKTPGrAupafrtwvjX4vuqQX3FfQCv6Phx2jSXjIP2AAAAAL0GaWEnhDyZTAhX//jhAB8t/5sIvz/NvKAC59qF5WUT21lNIw/EUvZ2Ot+G0s70fAAAAdkGafEnhDyZTAhP//fEAE24g4RmwLgAfzyVVX62x6ME7nhPR/QNq/yJ5WJcY7kkA0YlF2WhgfpIC+z2oB60WA8mMJh0pf1T1iRZok62gNszgLWf8yKmI2RFtVQcb5zwsFRiEaSnimLaa5HreFPvUYkyBQWV6DDMAAABSQZ6aRRE8I/8BHgo5z5FLQMz+tXSwdH8xgqgAQ7qQhKQCpje/SBhfMFHP3YfC5VLjGOySE5DKQ6PQFAE6Nx5pBncdRtFhh38o2JI/YWrWfdDajAAAAB0Bnrl0R/8BxIfWFThTxUxmo13vxaAEG63gz8LgRwAAACQBnrtqR/8BxMlGVG83Czr17dQAPvhWdkPV9V4/IxNw1ZEuVcEAAABjQZq9SahBaJlMCFf//jhADWztmL57QmdE5A4GqwAtb3YjNDdRV33kxNyB2GbU2vz8atcrg4PQFtYWm39l2LI+jQLu1lLfLzwtx9sdxUcICPMEMX+OL19p8bluZjWqy3HL8bVgAAAAZUGa30nhClJlMFESwn/98QAgxqMiJSFjIGZFhjOAEr7i36t2Io1vt6aV6x1VNbgunXwj51NnZGkYO2qyfMEO/EEbR2BcmTroor7Fet5vXTmROSU8s00eTjNSSZI+i7p/SOVHFYttAAAAKAGe/mpH/wHFfpTSsg54tNzhVAIIAE40QSYBZpXmsf2vorxYFrNdqMAAAAAzQZrgSeEOiZTAhX/+OEAHwz/iiV9LHkKAEJr3y+McPwnfcEdlpa/OFMD2eQ0yx+ST/7kzAAAAYUGbAUnhDyZTAhX//jhADW2Y2EKHkAUnpgXLQzN3BQfr2jmRoIhTwzG86rijdqG41L8vmnvF8WKH+8U50pN6ulKK1v8SWPLKdOiSplx53UEwSRLzGlhINhqPjNg+7YFHLYEAAAAgQZsiSeEPJlMCF//+jLACABaIN0a2YFYADRVW+960UmIAAABgQZtGSeEPJlMCFf/+OEAHwsaRE02pACD9TmhM6uNYZYFXXQlE/n04ENFh8sQUvep4PvX0y3J3+0kxOym9Vak2eavy3b4Stked1iYaoHOPxAY+Mu7aBSU/HNUA4hR7l0LQAAAAUUGfZEURPCP/AR4KOc+RS0CO81y3nND4jWADacMVMTKssVRm+sPLMR03aZYG3u1jpjAWL0wLGr5dTf5eLlvp972W/42xE3gKAK4h25B7C7+LIQAAAB4Bn4N0R/8BxIfWFThTaNRqvs5jgAIZ1w9oWcfI80gAAAAdAZ+Fakf/AcTJRlRvNwtZsOsWAA2etAWLOanFVdUAAABcQZuKSahBaJlMCE///fEAE2RbDVYGwroAHPtUHKOTws0CfUES5c6GA0DvGtHC5WSSLsO7gy7frPDCuLIaMY5D3aYEsmpvgiwQvajiS7SFqsDQEbNWOndnRYZ+QMAAAABJQZ+oRREsI/8BHimzwcnwy8odqU2h9KhP6NQAhTopVlFA/uDuGuq9SYJR0mdGlZgV2YUhkT4VjtZoh0OxRh1eNMorHSKylBOqlwAAABsBn8d0R/8BxIfWFThTaN/uiozRIACHysJgbNUAAAAaAZ/Jakf/AcTJRlRvNwvYz5dbAA2etAWKzUEAAABnQZvLSahBbJlMCFf//jhADWztmL57QmfoVS5VYAbZGbrUVDEphtT845JQSKxZxVzTbU82Brr+x5rqDXqVJ0vuTlW3GrctJpAc3u0n9iu5LPOCKAVTXPrwZLkJyrV2oU4q7Of7IrJKzwAAAGRBm+1J4QpSZTBRUsK//jhADWztmL57QmffIg4UygBMR3RwfPmFONk9V5o17ntyq9YDDLWLdlSc+FvP2i3jratnRfrXaofWeVLb5Ljz79AafH0Nh9ZAYjxAthC0hwq+FL9BeGCyAAAAIgGeDGpH/wHFfpTSsg/xtNzb9Cf9QAJxHbrcAvYRx+J+Mj0AAAA0QZoOSeEOiZTAhX/+OEAH60U1lJW6QUALXAJ64Yim4bEBIJrz/KCDea53bcvi8Mv7r/4JEQAAAFZBmjFJ4Q8mUwIV//44QAf3VXBtSEKAEtJsggY18PWa94hLUl0gRG9PrjP8oss/D5UxkInbFD/4V0PuZphCOMVDfRDY6YVRvtRd01lsI7CmQNNMfRq+xAAAAFhBnk9FETx/AcW4k5XkCldCvYGb4ACRb1DLVRpbvY5jnYdWii+Q20baDXab962S8ddbEMllkzjXspUsSsJduqrKkhVlR7lkMdJVO3NFRT4rUdr46zucKuxiAAAAJAGecGpH/wHFfpTSsg99Zd0WdnP5EggAQ+VZoJEmmlzrD5L0NQAAACdBmnJJqEFomUwIV//+OEAH60V5WlRCXZgASyVSd/O9OJiqjuHUd7EAAABXQZqVSeEKUmUwIT/98QAT/dXGm5u6kADYsIETOjCTVB+OV9Gs/SGnFR09CJXQkuGIgmZIsLi7x2OmgOJTzh0lFm9JNrBPVxAnNX0hqjClQqpZ0QfHs0fZAAAAIEGes0U0TH8BxbiTleQKWTCqwMeAAJpKs1fgwowtH73AAAAARwGe1GpH/wHFfpTSsg/uGN0AA6ocnVsF3VIO/aUqISp7f+GVt3pK4r0BBTQdzLM29Z9vN6E2F3gh3GANwnm3uI7TgQ8oxibgAAAAL0Ga1kmoQWiZTAhX//44QAfuz/6ZWgbm3/rTUtwABwEFGKkCLKWUx8T3bSItytdBAAAAc0Ga90nhClJlMCFf/jhADW2Y2EIcVs9HNE8b4AK4yNYrx11lXrpf9Mf+0h/vj41Hk4aZ5oRvlrPj4DJWgLDwyvt1WgajAcm0/JYeS2RKz0ODXjCje2U709LD2t96OfSV0NbEFvQuvmLjKasP3NaUH+mDwPgAAABpQZsbSeEOiZTAhX/+OEAH6xYEeAA/E4JEUAkK1oDhNfkwtoIxwURYJovVjd0wfilxbIDFCPCOzRSEiEKdwiR6J9wTMaFbLHa0qU7e8Z1jfAhS7G29Fak4Ebw8wrysi0bMe/vVR7fiOaIeAAAAVUGfOUURPCP/AR4ps8HJ8NRp11wAdzVN6PUP/XCg2QXAg1A6fB90HCt7dgTWl/uioLz72Dn+EKyFhINXEoQ93dnfnvYQTZnR0LuV2hFgV3I7PnYwwOEAAAAcAZ9YdEf/AcWvikMKsMRlk5pAUmACE5ZOj10wxwAAACwBn1pqR/8BxX6U0rIP8fLi+BkwATLRBgx8GhfQMWFmZgzqd/U0kl6LZ8tkcQAAAGRBm11JqEFomUwU8K/+OEANbO2YvntCZ9CrAPZTx/1cnKkAEO9YABMK276rGPpfAdBXHuk7mgL4tsgdELVtYYrmEmdNd1YBRrb/ZuJDvBaBPPWsf+p0Z6WZyHBIB+cpddLVCWCzAAAAIwGffGpH/wHFfpTSsg/x8uLczmIIAE0wnvYGXRikyldZkC9AAAAAWUGbf0nhClJlMFLCf/3xACDGo0zoAshu5/4hRzRNatJDcgt0R288qHEH7zDDJ7T2t3J9yqKPCsR7+hGbWh1zZoN19+tO40u1J/HOEdFCYPK/lUOynFNIs7sxAAAAHQGfnmpH/wHFfpTSsg+jA7RiA+OtaJIAQnLJ0elsAAAAJkGbgEnhDomUwIV//jhAB/d/5nllVBVSNd476IAQcPrMnTcDxyBRAAAAa0GboUnhDyZTAhX//jhADW2Y2h/gANZkOwHhr82Km5aDPiF6k4Un8Sd6LNtpLbFE4JuFqMe/MBfY7hndLq18jcrAG5H/4+8F6yCF32014G0QPHeGZmDB5KhUOqL2r1mYxlj0IjaMC4GKfPeBAAAAIkGbwknhDyZTAhf//oywAgAXwJGhNIAMtZGRfUabGltyw1gAAABVQZvmSeEPJlMCF//+jLACA9N75UAGE/ZamN9lu3kd1mVz70tGPrSsEus0VxSPwBFtx2kCbGTxIZ/qqYHlCZeytAE85kwTcGrMc9z08cVvV0ZXe9zw1gAAAFFBngRFETwj/wEeCjnPkUkR1V82M8za9rHY9MAG0q08U9Y6BkvLP6RB1prCQk/RBEkLpmi5DeLTBeglxoFuJ1R8BJzRJEB5G4/1b3HIhhzD7zkAAAAgAZ4jdEf/AcSH1hUxsIVF/PqwCh7oWgAbQq8fts7TFbAAAAAeAZ4lakf/AcTJRlRNOJpbpZzbjgBCZVmgkQwSUxbBAAAAYUGaKkmoQWiZTAhf//6MsAIDxv8FXP0AF6bnv20e2oqnEoi8E1u4BHgOKn966135KXcc9/gGulTh2Qu/3c5IVd5Mevm1yfoWuaoXslCynAp498wPLRjsqFrpOyinW621HkAAAABbQZ5IRREsI/8BHimzwcnkV7XKgAM/PzNM+g4iqA7BPu3Ds48EdqJaefa33q27ijiVCMuE8khcqwUrldbZwwEJqgwnRNSuDSD3gZaxDizFRvbzX4ps99zG0az05wAAAB8Bnmd0R/8BxIfWFTGwfjj2F6I3pvMUoANhXR6SZsbJAAAAJQGeaWpH/wHEyUZUTTiaTTz8Iy8zMAE6lWaCPh0a6HNFaS675m0AAABfQZpuSahBbJlMCFf//jhAB8t/5ovPtFAJDW0UDAAvkexeyNd2Y5w8vwRk5A2nAcD76XWxdi9IZZEDv/djZZY4/o6jW+FnezU/NKbc2oursVmb53GpBmKJ3CcWX+y6IyEAAABSQZ6MRRUsI/8BHimzwcnkV1FrbAYVKoAEqPipaYggVEiiVgagYbu8BaGIDe0ri+ZwPoeHaH7Q30C3aBsHOr/Ct4MTIkF3GVYNithLjzsavozmbAAAACMBnqt0R/8BxIfWFTGwpxK7BYcAAfSlelzPh+m5O2AT9LNNgAAAAB0Bnq1qR/8BxMlGVE04HI9SD/W/4trABCZVmgkhmQAAAGFBmrFJqEFsmUwIV//+OEAHkZIe6UD1VeYAHWgD9IMXeDJYy/vmKbVpSLuceVU0AvQvjlX/L1t/G2kx4hsbOeidDN/IoEyyyQQLq2BwiLCYKmndxcY3DavejKcVpt2Hv/IWAAAAS0Gez0UVLH8Bxe7duqYBnUF1zE2iaMZ5AAnVyizhx/LJjCjAYFBCq43TtxripfpFmsvQi64mGI4yxB1otIi+Rnd9/o1dBLI9KrfSaAAAACABnvBqR/8BxX6U0q+xDRyds9R8RyAAIHEPIBBmBaXiSQAAACVBmvJJqEFsmUwIV//+OEAHk0pTgG5/BsagAdjkwUq6YsJMTIVvAAAAUEGbFknhClJlMCFf/jhAB59/74UAG1JPWhb426Ha7N6WoCgrj3hjiIUX9Loe3Bhb4Mcr6wKYnQEnFTwJw/6I9vA9ffFRi6+BfHltHRXFj3IXAAAAUkGfNEU0TCP/AR4KOc+RSRHmDnfH6YANgbF4qzaVlH7SfnH0CdW7YiOo/xPVemi4zmoaCrIkSf854eXJqnEMiq5vhUeUgkgrQSAPcU7MHBY+FoAAAAAfAZ9TdEf/AcSH1hUxsTSKUhnaLIAAhMqzQSIYJKVjgAAAACABn1VqR/8BxMlGVE06CWNhKv5lc44AQQZmmTAmxiLASQAAAHdBm1dJqEFomUwIV//+OEANbO2YvntCZ06JuwmcYAFcZGsV466yr10v+mP/aQ/3x8ajycNM80I3y1nx8BkrQFh4ZX26rQNRgOTaeksPjLIlaTyLWAWFNbKIa0HDPyGxIrT/dppQjrK8AyD8/sTVf6vswEDuDvegcAAAAGpBm3tJ4QpSZTAhX/44QAeTFgR4AD8TgkRQCQrWgOE19zfkR3lCcAiaMgpaBVsH8lEWnKMaRk0eO8/+qc+9BUYJw44uX+TJJ8AtPkm6CVtKEGzDyALaiBKNSPl2bpNAmpcdMmucZhfEdEjAAAAAVkGfmUU0TCP/AR4ps8HJ5SoX+tvJAAlCgx6PTn+dckbctxL1ZlRZWhmaGvH957ZM3Zo2mbbQMWPKvpyLjseC5O4A25Pdo8+i5oBuY6x2YtkUtwdV/G3xAAAAHgGfuHRH/wHFr4pC/f5FWgoxI1EzMAEPlYTA0U6XwAAAAC0Bn7pqR/8BxX6U0q+xDRydYzR2EAEyNAwY+DQvoNATKeUzqd+w35i6nVsu4+EAAABlQZu9SahBaJlMFPCv/jhADWztmL57Qmanshg0xol6JhM1ABswjUK3CwSMXJLtqiISnx9FJSKRPJ/GoBGBzQZtZaQ1jxJbdW0sCnFRt8Pgjc01ed+n9eOyzkxf6N8+G8P6imLKfbcAAAAlAZ/cakf/AcV+lNKwDMtGpwA/6YX4QAS7Ce9gZaT4PWVWQJd+gAAAAF5Bm99J4QpSZTBSwn/98QAgxqMiJSFjGvJ9dFJDcgt0R7KAEnjNBH3eYYZPae2W6aExF9z+K5iTPMEXyTRRFpNy7JAXCBKPLxq8vgu1J/p24h7JpcrYC7Jr38N8ZOf3AAAAHAGf/mpH/wHFfpTSsg1YlL25jtbAWAAh8rCYGx8AAAAiQZvgSeEOiZTAhX/+OEAHZ0pZWznKm0AAhofWzSoR2fdRMQAAAGRBmgFJ4Q8mUwIV//44QA1tmNhCHFbPOp8QvUnCk/q4gBAZ/VpXEWJ8sRPFNY9+b2Gg09GEZu1VSvY2JLOIBv5FJjQdjTEZv7Uq6zLoxDY/gTaozEQ0LUMzUsXW53ZLaD5UZ4bhAAAAJEGaIknhDyZTAhf//oywAefuOPmamCACnswnw4zP6mTkjizOdQAAAF9BmkZJ4Q8mUwIV//44QAdsiITHS1UAAK42LL2keEhykinSObliVBxlhjHAg4nzpXYd5+Y+VZ6GNRGzlMQaz5ne+zMJEJWloMkz19X3fASa29wqpEOlwdKps+gjj3HkwAAAAFJBnmRFETwj/wEeCjnPkUs+QwkdXwacfK7ABEDYmmnrHSfpzsMSni/nv7zl7TqYZ+KWxT3lisk5hgh7Zl1a4tSiwmqbcwnZiHf4rAb/ExthtPyDAAAAIQGeg3RH/wHEh9YVOErn3dP4nf9awAAbQmtwSehWEWoGeQAAAB8BnoVqR/8BxMlGVG8FAmT5saJwAQ+VZ7sgSelk7DyBAAAAMUGaikmoQWiZTAhX//44QAdo1dzaibyzY8hsIAJvKfL5m0g6CJsO9Oj6oNiTf+UXLuAAAAAiQZ6oRREsI/8BHimzwcnwwKLwsJ8QcACHz/gHBujC1tRBAQAAABEBnsd0R/8BxIfWFThLRBYIJQAAABsBnslqR/8BxMlGVG8FDA5t1SACHysJgdOG3AMAAABYQZrLSahBbJlMCFf//jhADWztmL57QmYLYGOekqMdKQAQ3WTVFiIIZUAw0h1f/5VPLPnsondS8/IKXzF/JvAWrTe02yMLJEEP2BsVnPWlcJLgKpu0dZWqgQAAAFlBmu9J4QpSZTAhX/44QAdlwzTd1SxWerABwTDzIPb8TQnvHjNH025M+Did3o/UOW6dZmujmN0N3+1SEqvrmkdGakyVy4MRBd2DhsNeHSwZL2sb0x9TV/23wAAAAFNBnw1FNEwj/wEeKbPByfC+/61WZjZoTfY8uFgA0KbjF1k0a9sHbkntePey8K/icBDuXvDjUHE888WC+qccpfOjekYUHGWDT1mPffKnkZ/9ved1oAAAABwBnyx0R/8Bxa+KQwqWEWuEojCQABDO/A6D/qzFAAAAHAGfLmpH/wHFfpTSsgwWlPRKdPwgAh9zzangCkAAAAAsQZswSahBaJlMCFf//jhAB5uJJobRIFLZyPgADgExfogo0AhEHegwPgWOdhkAAABqQZtUSeEKUmUwIV/+OEAHm4M9D/WABz0Pal5zq+EyVsk56dxwhbPHKG0skyQtqb+prBfYPkJ0Vmp3AJR87P1Lkz/TVyImpbLSfY/bui20Jrhvsc5BQZhJBbujtJIjnm3AHrm1F++RBMvhgQAAAFVBn3JFNEwj/wEeCjnPkUs/vP5gC4APqlhN21Q/F/oFpN41xcV3rN9la/wdPI2X1MKwx3Logyn0NW4IGgY20+o94w7CbVyyoXbR+60OxkaKc9JFzVq9AAAAJAGfkXRH/wHEh9YVOE8oxlP4iVAAmn6e9gKWJ/tRou6PGQW9vwAAACEBn5NqR/8BxMlGVG8dCzriWujBAAnUrCYDlYiGPTF4mrwAAAB0QZuXSahBaJlMCE///fEAEu6JzdwAzWCJ6Vdo6ibHrKX4456vcPKAjmgRa1mycppQ35NAsmH8xjrHlz+RL8bNu5meFF+fKLCIdrP0j7YnpPzVwgb36jlrjkaDqq3vFL8X86mCBHoc2XRaOwAjbv5stXEMl4EAAABOQZ+1RREsfwHF7t26piEzNwqK4eABKDGCDtOoihIZIfGeNatBrLs27mzQt2OgCSo2Oc/A4Q4oNzXwgZ/ddN3EBgUJ+SgVbxKiAqscAXKtAAAAHAGf1mpH/wHFfpTSsgzuKkeI0nTeoAEPlWaCTP8AAAAvQZvYSahBbJlMCE///fEAEs5s7z7pfAHIQAtVidLFNb0Q7YvrgHNzz31xgS0LUYAAAABhQZv5SeEKUmUwIT/98QAgyOv5zY4VCfmLkcsQAPxAMH/O7SOhH0eJG67m/GhUk7FfXXqHoQLjvRlqmoQ/ElqTNG12uQ3uYoq8FdRANfEag2g75nkxOqjwZKWh3M0/+Xz9gQAAACdBmhpJ4Q6JlMCE//3xABLObO8+6Xv/xAA/cD/RfoWTr6cJTzdUCIAAAABiQZo7SeEPJlMCFf/+OEANbZjYQhxWzz9zdMKp9hpYADtDuSs+TB9q7YcKtVxCDOlodaAfv7kqHVAy1v7+eoK8B2n0ZDxHAD/Y2c84XfxwiTyZBF22bjGr8ZPFAU4e6D04ensAAAAuQZpcSeEPJlMCFf/+OEAHy3/mwi/P83HSAEHEtn4oscgP1mHEogcTtZsSfsIDoQAAAF9Bmn9J4Q8mUwIV//44QAeRkhyH3BYVQADgsxbmnAWZxWKNf/3+6lQAkIrcOKCv08OXdX/CAkoyiBLK5BeO+EqJN8+68aLRCxo8/sHc7MfRxNO5Dd6OTtUdboDI14G11QAAAE9Bnp1FETx/AcW4k5XkCk2XCRuo5EpD0rm3cAA/jKZ6zU/FMTAfWRE3+27jVKag6ELJ/bY6zE4m6sytWDw0SsQF305Xb1DR0yMQVI4MEQxvAAAAHgGevmpH/wHFfpTSsg6Gow1ANLAAQVEbrbon6xfM8AAAAHBBmqFJqEFomUwU8K/+OEANbO2YvntCZycD7OEAFork9dX7vx3veSxd3bX0VoLrmCZk6QUtviP7TeRX/FnDrK6b6hawLwC03pupiW85NzxjwnMacj3WqHMRtNpXPbIvB4MY7NA2rpl3Odl05kieA5gJAAAAHgGewGpH/wHFfpTSsg5IXEKDEm09FT2ABs+uQUCrYwAAAGJBmsVJ4QpSZTAhX/44QAfD+ALfGgAPgpfVg0g9GCNrmz7zc1TwQPefm0cnC41iJQldHIut4smk7nyU/9RQwFiKZ2EAn0kkshaqSygVHl4c50RAZmczjKxA/7GbIlbJ2d0IyAAAAFJBnuNFNEwj/wEeKbPByfDNH6+WAAmq8to3ld2zB+355cv6IDlEHIVv3TRJXoUYyprWnqkCg68Zh63UDydj6FW5dMqjpPXpN1kJOERyKfloqCG/AAAAIwGfAnRH/wHFr4pDCqcRMJd7dQAPvwKWP01bjNYcr9rkD3cpAAAAJwGfBGpH/wHFfpTSsg54s9n426gAfTisAcub+if13oA41+mUPN2owAAAAF9BmwdJqEFomUwU8J/98QAgxqMiJSFjIO/+aAAFdCESGaziFmtbFrX0iC61y/EsDkdJRQjrpJlE69AaiIp3yur1eDyHiyJ4iU48Qurt6NXsHYke9B68DcENe/r8u8KHOQAAACABnyZqR/8BxX6U0rIOUwaMfsChVMws/gAh8qzQRdKB0AAAACZBmyhJ4QpSZTAhP/3xABNObQXRG4AAmldV8CYZGJjfLNasYSILQQAAAGtBm0lJ4Q6JlMCFf/44QA1tmNhCHFbPQaGaFEj9IAJqUf3xOLMGM/xuDhXpPlp40LDezGXvRLsb2IJrdsg9+nu2e+sNbXaHUdlmK3yJu8xgVTKLNaUYKK+azcF1SQO/FpD10KZOa37eDNxR4QAAACxBm2pJ4Q8mUwIV//44QAe/RXOHrZjZeUAE6t0LisPePJ4UtwyqPejnPcVyywAAAFZBm4tJ4Q8mUwIV//44QA1tmNhCHFbPQZ8DHPSVGOlIAIbrJoJQ8omJ8UpB6nO7/8EqNRTunp5ShTdw7+FFxtb/2RfiJ0PelrjycQWjhPWy1Q3LwcWWVwAAAFhBm69J4Q8mUwIV//44QAe9wzTmBPgBqwAcEw8yD3A2hptuN54Su4CbBQ3eRUMbbptGvXs8DcHGOATMDLQpH3i/rcBlo7sJz20iS98dKfUHl0CVNpJq/IGAAAAAVUGfzUURPCP/AR4ps8HJ8MshiitTxPfdvRuqxgBAYe/9uD4oP5Fpg5rmJLZGcfiWrQMc5A00rDwQCH+AEf8tj7al18k4UnzAx2v0HtuYSCWCG5F87IAAAAAdAZ/sdEf/AcWvikMKr4+8RrwZpNPYAGz1l0SzF0EAAAAcAZ/uakf/AcV+lNKyEAwO6webArAABs9ZdErSYAAAAChBm/BJqEFomUwIV//+OEAH84kmhtEgU3bkHkALcGK7+9Oai7lFCMKAAAAAZkGaFEnhClJlMCFf/jhAB/dVcGb/IhABw4qG4P5/YyCNE22pw9uCkxwSkjVkrPLTDWJe7rDIVFfrJJbKkk+4Ut4iEeXLfgpH/hvEccaCSVPMTO11le00gD6QVJsCwMV/TP0b6Wr2IQAAAFdBnjJFNEwj/wEeCjnPkUtBzzFUJOVmuAD5fdBEvNXcw982saHk8KAWzlVhM/BWikapnMP14tXpruIZJreGlFOfgcVObrq+j0q+qfvpA+zxWAnmAjsNDUEAAAAiAZ5RdEf/AcSH1hU4WEj/Vpm6gAfJxNQt97jjgoirZ3XPqQAAACIBnlNqR/8BxMlGVG9VOatjbuKTABNJWEwHKEZ3Y7+BNQvgAAAAaEGaV0moQWiZTAhP//3xABP+T83cAM1gielXaOomx6yl+OOer3DygI5oEWtZsnKaUN+TQLJh/MY6x5c/kS/GzbuZnhRfnyiwiHaz9I+2J5I8YKcq51mODfP++1XvV+eBVL9KRaou9YPAAAAAUEGedUURLH8Bxe7duqYhXQ4WrewAEif6hz5MBVkKOs6Rf01PfTl1qDrh81v3I91JycNp/rnm+K151cdDahgAeuFDPpvbGNg4G6bjZskSasvxAAAAHQGelmpH/wHFfpTSsg99ZgdW1Heof4AIfKs0EoMsAAAAKkGamEmoQWyZTAhX//44QAfrRXlazS8WNQATjqFDAIVlPJb70AoA8hALBAAAAGBBmrlJ4QpSZTAhX/44QA1tmNhCHFbPRuKDXbQANiq8FZlZSPRYg+lnOSEmYjoJ2K+u2Ep7QXHejOYa0uIJKfTx26STppB09DdL5JpMXSTXNm9nmakV3rAZYIZc+/6wZnUAAAArQZrbSeEOiZTBTRMK//44QA1s7Zi+e0JnxlZclggYruLmsACaV83zG3eIHgAAAEkBnvpqR/8BxX6U0rIPvc7Nf6AAHMIiY7GgsjfIc7zNbuewUBGtDFJFl14BsW/bOrNnKCIoGU4sH9CJFIqhuGYj4agyGNbZDtpBAAAALkGa/UnhDyZTBTwr//44QA1s7Zi+e0Jn0LbQJC99m/BABdBY3gnY97wrIKRbk70AAAAdAZ8cakf/AcV+lNKyD32BFpJM+UBAAh9qXRyJw4AAAABmQZsfSeEPJlMFPCv//jhADWztmL57Qmf12+ChAEABM7yVo8xwi55BeUiUnpoaCPUE9R61jCf4jYx3K0pzTRH5kltTArtL0sZAdAAtGlO7ZN7Y2XE2hfsuxhqCxetfeA17FSrJlcFlAAAAHgGfPmpH/wHFfpTSsg/x8uLb8f3SYAITKwmBxKNscAAAAF5BmyNJ4Q8mUwIT//3xABP14GgE8tunyzlJQArdRFYjMvrjpDWIqs5O0BY+P0fPh0+mfDUG1EhKGBduaFbHPkSVwa+a0Vbrq4vrST0yXIQuLD+3im4Kniy4AlQ3iweBAAAAV0GfQUURPCP/AR4ps8HJ8NX0rnxgAPwHvPSd1UDifE1M264c/t8fvSqdbSx4K8KEROwKEEyVRF41zvDb9yxzxk/uKXiQqTj2aBLx7+6B7n4F7KwYAo270QAAACQBn2B0R/8Bxa+KQwqwxGWXygIAEL7xcHqfSGElOdLp7DhkH4AAAAAmAZ9iakf/AcV+lNKyD/Hx2ed0GEACb+yqa8Hnzz8CFs4eU8ejYtQAAAArQZtkSahBaJlMCFf//jhAB/d/51/w0DmgBgDwMD1ULZndOomdMPGXLFbjsQAAAG5Bm4VJ4QpSZTAhX/44QA1tmNhCHFbPQwtIVlYS88AJmOkp2piqEeKXWtUnw2+2KAZGUNYTT/mRnp9EIsd19inisYFPaQFjYtGoAt8oHb9bU6iwFrsgPgWNJu1uk2M1/3lSmf8dFfQA4EkO1E0IDgAAAFtBm6lJ4Q6JlMCFf/44QAe9kjQDcKq2ismgAL65v1+18sXmzwzIYoPX8VYdvFm3fwKFz6AhxpO+kR87BoGtkz0/c7e/rNVPgzgX/b5VOrGKf44OWgQJ8YRN/0LRAAAAUEGfx0URPCP/AR4ps8HJ8NM/8yi7DWhBCrfwAffxdNRM/mUZUdJXgI67oy7sU+cA5TidnScS6QsF3fjMicFpOaWcEz4Gq9mJ0q+/rxBP/LSAAAAAGwGf5nRH/wHFr4pDCqcUCEmV7G3CABD8sy8fUQAAACABn+hqR/8BxX6U0rIPowVQJps1W10vFJZACDdbG0uG6QAAACRBm+pJqEFomUwIV//+OEAHv0pTh62Y2RqABoq+aRK+v/uH1WUAAABnQZoOSeEKUmUwIV/+OEAHy1VwWnZtABDeoGY68j8DAEgPReVEmUAM9fQY8R3Z13JgVw6z1kKnff3AnXJaBUz/7FKX7fAlIaHmX3RsFMn5LBbREKz/Iv2IuiJlBKpi7GJpcC56KbojIQAAAE1BnixFNEwj/wEeCjnPkUtCHSsVfeujIAEzj44A2TyH+4kEfULIycFceG4PIL7FpJ/zyqzXVEhT+akDaYDwmu4P6ZKGvCW9ZJ8MibQkdgAAAB0Bnkt0R/8BxIfWFThYkghok+pLAAbPWXRLGqjnagAAACMBnk1qR/8BxMlGVG9QaPFSk54/PXAAG0EB3m1szmcq8OTSWQAAAG9Bmk9JqEFomUwIV//+OEANbO2YvntCZ04l4M3J3wATO8laPMcIueQXcU/YSsScqK8pqCTbkCB8L9qE7byKJdP3P5N5bYQVf3yWXxAF0VbnRO9JOVtj+oHD1GcDDOUEL0e12HLiROsMCreWTlanDbAAAABkQZpzSeEKUmUwIV/+OEAHwzkhpZogBMueUhEcX85ACfw+rXzOW6Iqs3TO+BxGvrkD+IYshrnYYoMG3MwJ2KMtJAtQoa9xliw2Vkg2ZGbXdgUnUfe3yKgzWJzrO17/7rFkR/17kAAAAFxBnpFFNEwj/wEeKbPByfDOPgNUALWVUMxzPav5ry+xy+L4lAKfg4OvbxKN/8Pe9ydxCMDvnjlF2f3NAF2SkyiiGysHivtPtGEp0MkU6pvnYoUZAlnkM+AeO2zswQAAACkBnrB0R/8Bxa+KQwqnFAD/RC2EAEw4QHDZzKYDsJ5/+FGl59Nf6R3fwQAAAB4BnrJqR/8BxX6U0rIOePHZnaRyXKYTBoAQbyaQomEAAAAoQZq0SahBaJlMCFf//jhAB8t/559WFFw1U4A7KEwAE6vSZli6ZbAMzAAAAGZBmtdJ4QpSZTAhX/44QAeR94f/2HH7+RsCKFgAdnyNSNbPaLKvErpAPgqWm4KhfaWewmpCf682+Wnp6a8PM8mF0oWettQxDNC7AtQnVLdVeUYRO7328pxXohmbMuGXmgq7MFrHbVAAAABRQZ71RTRMfwHFuJOV5ApNGEMXak1WLaAE0hTrtFsDRmbsDRRRFGXHxt//Paqc7Kj/OPkngVUn7bRTgNRlZ0vPZvF1L+LFbYA/XU8Sp/A4BL+BAAAAHgGfFmpH/wHFfpTSsXU5RvmUr1hP9RawAQmVhMDtLgAAACVBmxhJqEFomUwIV//+OEAHk0pTg25/BsagAdjtgNES59UDQx8bAAAAUkGbO0nhClJlMCFf/jhAB59VcERhqAC+tpj5tIvtb6ty2IuPdZXpx4uvrn3GKGX78GR5YeMi7tfJUGwY39vKR039Rg8sp0973QPsas0pEro6Wh0AAABWQZ9ZRTRMfwHFuJOV5ApNlmqkHin+0q/x8V9SAB+XjnOsLYDbQcG/s0/itRL7RjcgatiNs7oQw3eGDuF0WP0bSq0Amb3bDZawkuBphyJJf2AIpPE6X8AAAAAmAZ96akf/AcV+lNKyDUbHRoeycAEL/4JMtr7DUJkzb0fMi3CPgqEAAABYQZt9SahBaJlMFPCv/jhADWztmL57Qma8Qq18oACADtpmZHYWrgO5feBWI6BQtCOcNLnZXE6cASKND6c5yd2iaRWyoWojSSm74L1Hw0Laensfqsx2wG+uEQAAAB0Bn5xqR/8BxX6U0rINRsJUjy99nw4AIfKwmB3/4AAAAGZBm59J4QpSZTBSwr/+OEANbO2YvntCZsYl4KEAQAEzvJWjzHCLnkF5SJSemhoI9QT1HrWMJ/iNjHcrSnNNEfmSW1MCu0vSxkB0AC0aU74k3tjZcTaF+y7GGoLF6194Bm6G3Do9tt0AAAAeAZ++akf/AcV+lNKyDO48yBLSdN6gAQ+VhMDiebl4AAAAXUGbo0nhDomUwIV//jhAB5U8yeQ3/3uIAK41C4jGfQ0UhXjb/tXJWX9xwve87T8KClnmg/Jvczm3p1A+jKA6JRvVDPq+wPPAj/oMkcWBNxGI6p8QYDGjB4wM0dQUIQAAAFhBn8FFFTwj/wEeKbPByfDHvJ7auAD8B7z0nRfPEbfj+pUaZMIAWIgKvujYoWEDR1lh53M9N42flzqpKF7xtsMiz3JWzZyQL0hvFki8wW789//SIt/KEnaBAAAAJgGf4HRH/wHFr4pDCp6UAQ17dQANc8b7oVk6OSWMQtvWu4m4PBptAAAAJgGf4mpH/wHFfpTSsg1GxfjujCEACb+yqa8HnzxrYzE/mUZgWTPgAAAAJ0Gb5EmoQWiZTAhX//44QAeff+df8NyMeO3BmACaV8De3oKhajCMMwAAAHBBmgVJ4QpSZTAhf/6MsAN5ekMVU2m2og3OqBrRFJZTOflABEHqUJlLSy5d9wHmHue2HgqEpvl4YtVVNeXQOUuEYAgZNrNCmFXe0ereWZbhIWijhzn1TsXxME5eHU8b+FRkDk+gohdF6t0YwmVatWqgAAAAXUGaKUnhDomUwIV//jhAB2WSIHKBVWvOAkABtRSBYz/rRebOy66n1KOvu3XEceRCavQEWhaPbCE1rfo6uCL0Jn9vbI34avKuVCSnEzJXG7i7GWzqT1xZlWLXS4X5EwAAAEtBnkdFETwj/wEeKbPByfC/BZpYqQx5cjYjBCwAapFdrOdHP5kfVUzzl7tz2gH2q2wicFfA2gFnmCGQWgkzpjtRVA9I9cN602v/IMAAAAAbAZ5mdEf/AcWvikMKnZPL7zyHluEACH5ZBEvfAAAAJwGeaGpH/wHFfpTSsg1an+nq8JAAEHHcJEdMvREGU0LfLk4++5+oMQAAADZBmmpJqEFomUwIX//+jLAB5+431AQZZe9+ACG+FCZe4p/ajrA40DWtlNDB+MRlJC0OVGnHukUAAABXQZqOSeEKUmUwIV/+OEAHau3c7jFYAATFZkAesp681gYoh1tAk1kQaKAnhcbusGPMsWgJdL3SAe6InDSRdZrkRQ3f9Icsy4eZKzRRtNd/NN6quFyc3kAZAAAAMUGerEU0TCP/AR4KOc+RSz7gTfbggAXFZdmyAby2fXQjF3T9UHKFY6/iwhHKtOkwNxAAAAASAZ7LdEf/AcSH1hU4Sx/+zdaUAAAAEgGezWpH/wHEyUZUbwWtvzt3sQAAAFlBmtJJqEFomUwIV//+OEAHZhxcCMth7fP/IUABT5HyBvDKnH6E8525w1S+998isIWmjf4nIi5RjWn6z2ct4hvOa6d/BH4PP4oTSkh2n+yP+9Cak809qHnzIwAAAClBnvBFESwj/wEeKbPByfDGVC55O9is+5V5YAJxrOzsL3FTlowDe4UMwAAAAB4Bnw90R/8BxIfWFThK6M6zV6H+UTgAh5BqKyavTOUAAAAbAZ8Rakf/AcTJRlRvHaiBKlu/1gAA2etAWKx9AAAAZ0GbFUmoQWyZTAhP//3xABLuibUYwga43ygA9/GQN7rGQ0SkcdXJYvF7M9tSLuC6EBBi7/Mtx/Pd6wSkn4UbpHY35Ab136Xf8INK7XHOfSjJ6RknwvbA0NpAMPJrWxdrBeyhPG39eoEAAABWQZ8zRRUsfwHF7t26piEmBjG1qJHCi2wWivcQAmrCO232rMzCFXo2ukOj+uPV0emSy5g9gfP0qkCQ9q8V1Rj9S1iGQLHx2/WvH+erZu+N1jmGEsXweoAAAAAdAZ9Uakf/AcV+lNKxSpccfG+JULVLAAQ+VZoI5+AAAAA0QZtWSahBbJlMCFf//jhAB5NFTnNqWfBADXMJ64xYpuEGSJkbioIN5rdeEY9zMPyJoHwMgQAAAGhBm3dJ4QpSZTAhX/44QA1tmNhCHFbPPoPCzhABaK5K0tbFCWzO7R5v9F6du3WKjw2bqbBzgoWU+whbFcyz+sNWDxcOvxj5SLbhUHcUQGALoVViZI/eM6OdLSuU5levNw/MHjzaEz7VvAAAAEBBm5hJ4Q6JlMCF//6MsAH09k8w9iM9HQAQ1K3a/HKbEX4bjVlETzTv4IgGoAq67GzHqQAskg3/KDsHwHLLO9SDAAAAZkGbvEnhDyZTAhf//oywAfPTj9WAC5X9llQY/Xmqi7gSf3kMBV2gq2RmHb6djWg6HIkLpyKGXXsuhUd1njSpWewUm2yXHGuHTACJJd/AtlxvZfgQElSZ92ls5sbRStvBTojbpxgkIQAAAE9Bn9pFETwj/wEeCjnPkUs/lZB9/3AATLnZSsw+LVZr2EaT8dpPoLT2hgJU0T5hlkSkajbh5ky+DZ7or6j7nlJMv1xbNodFYu7htdsFqNNoAAAAJQGf+XRH/wHEh9YVOE8ozJxOuKNgQAIfKwmBdbdOOUCX7AW3ptEAAAAeAZ/7akf/AcTJRlRvHQrqQ0zj3qVAAh8rCYGlR/+BAAAAb0Gb4EmoQWiZTAhX//44QAefVWk9wT01AA7F3p4lIv8uVZEwWCsPwoKmiumnAU5W/mPoyTGlxHBjU7YLxRkDceyfuQpDC2CWuOPd7WeSIooVFWRR3BaR96/GbYLl8uTw4iXFdy9VoQKCH+ggxv3hoAAAAEVBnh5FESwj/wEeKbPByfDF90ac0ygKgA/JepWbV1ndCTsdxUZ+1p1prOrkQ1JRbDRuiJIxFdmhPoPHD80777pBXD8f3kkAAAAdAZ49dEf/AcSH1hU4TnkPdhX4ZviDgAh8rCYHf/gAAAAeAZ4/akf/AcTJRlRvHQpCrV648QAQ+VhMDnNTiqv5AAAAYUGaJEmoQWyZTAhP//3xABLkYz3uL88AHA2S6JiUEpsTPgP/yfoUh8XrMAWWHriwtecaH9FEzGP+coRHNnsKjyvUaHhqb7hXJHEwU4yMnOpEpcl6ULl1ptWsKR5pLc3G6HUAAABcQZ5CRRUsI/8BHimzwcnwxP+tLlhoyI+pKisqf9QAQ7awbZohj5XgHbvr0EL+b/edteY9j9rqFlbT8aYGL6FwjPOgsTdSuLIxUihW12bI2vlWaStdWQdYnw0RI1MAAAAgAZ5hdEf/AcSH1hU4U8VMcp4fq34AQkgrvOwDBI6eQ+wAAAAfAZ5jakf/AcTJRlRvOUgcUFk+LAAQQIzsBRkKrxJb2QAAAF5BmmVJqEFsmUwIT//98QAgxqMiJSFjGu6uf5jx0AATK0zCV4X5H3zOO/0SHn95S2848ld72tx0v6IRfcas1iqFLZWLepGdnAi3G4q+zciR0GURIv5b8ODbjWmty2agAAAAKEGahknhClJlMCE//fEAE05sjrybJVDJNgA4xPA6V0B1AefNXhaTC0EAAABlQZqnSeEOiZTAhX/+OEANbZjYQhxWz0KHAMrADadQwzyDe+6i93aM2XSl/Qahc+0qr1tOMFimFevNiq9tuDK/TSNCZRvlvBipsj6zhrCbBGBqr09Ga3os17FDloLLWhzJLIjlT8wAAAA1QZrISeEPJlMCFf/+OEAHv0U1lJW6QUALXAJWkn//jrDXCVBywaFJfanOKoEeHHJsaEIVyZEAAABXQZrsSeEPJlMCFf/+OEAHvys3LABDeQIyzbEOVgzV1W/Uaasm7LG5cshDFNjoedEBlVWx2huYEQNAF93VImIyW+bcj9OT3ATfK1uDF0VdNJ46cK1669yBAAAAXkGfCkURPCP/AR4KOc+RS0D+9d5AB9ii6WdQ9h+8/Jub///IDnB2tfgS9aSkjLLRZ/BAolxL3zieflXCg50E1q8+q15H/fUi+oHY1c02ci1IH/akWeGev2aKxUNUKZUAAAAmAZ8pdEf/AcSH1hU4U2jFERtuoAH1JJhjj0EtuIZ3m+qZvnMNt3EAAAAlAZ8rakf/AcTJRlRvNws64T+PsomACEysJgVh/Z6eHgXLF2cq4AAAAGFBmy1JqEFomUwIV//+OEANbO2YvntCZzbCTKgBZHzOxjNl8ZFEyQnmAAYjXzZYK6vB3kZLuoNofKYo/DA2Bu5MLTlQPAFsp3JqZIMDw32YVrKfYbfMrvU1coRnhoMnTTVsAAAAMEGbTknhClJlMCFf/jhAB79FeyoTYgAnVe+YeaKLoWo+boukejXdooWbD1Y3mz4q/wAAAGFBm3JJ4Q6JlMCFf/44QAe9qgGDsA9DckYuIAMp01fub0vkOjzKZOOVkdYazjagrGfNaUehlLt0uy9+OQlz2CCm5uiUXvB9For9PrhwLJWND0HDqEiRWBk5qdPlhI8SnIGAAAAAXUGfkEURPCP/AR2xYRUBd/ABal9X/vUK2i2Uj361847MFuhPCPsCA6VctyIzDjrVMJGsL8iS46yL/hk2IIT/TnnVWcUsDW3NQ9obfPUsTBD7hBlDkuBvfzYFLmD2OAAAACQBn690R/8BxIfWFTYisCUHL5769HdXaxtACE4dZXzbHmImZ30AAAAXAZ+xakf/AcTJRlRkm0qWhxYZHQz1OCsAAABkQZu1SahBaJlMCE///fEAE/5PtRjCBrjfKAD38ZA3usZDRKRx1cli8Xsz21Iu4LoQEGLv8y3H893rBKSfhRukdji8gdmoUGQkWM9VgywRk2QcR037vkX7v1piSLydfNtN6Q/XKQAAAFZBn9NFESx/AcXu3bqmIWH+dKwQVKixsgAnbCO233lIyairgPGARFNrRiVaRH0Lqt2P6z+qXym64xSAlOb4KRN/lgKtlAlannlrLh3+pwZz/5kZPlnG6AAAACQBn/RqR/8BxX6U0rIQDA6wBL1uJBwQAh8qzQOQDWh5y478boAAAAApQZv2SahBbJlMCFf//jhAB+tFTnNpBF76/aAC6C6Tv53pxMVVaQedgUEAAABrQZoXSeEKUmUwIV/+OEANbZjZaYAs6jX69OMb4cSjC3Mxc2Yibp95hLZndo83+i9Oorvk6ZvSwzBzgoWU+whbFcyz+sNWDxcOxBn7K2kQ0HcVq7u6kVwmSP1dhbpo24QH1e9+rm/0XC8qa4AAAAA0QZo4SeEOiZTAhf/+jLACErKj8hziHWkAIOakE9x5+JtLsRGWKUGIxd6/W9p2Gc4qhFqOIAAAAFhBmllJ4Q8mUwI///yEAMzN4M4sh9GSveM4ACD3TU3NnFvnTamRYou0l2hSqfnL5Sp4a11zmhXkR6Pxy3YGBTkrAwUgw1em4mLKFO7iLqcBb9pxBszvuGmvAAAKEGWIggAN//728P4FNlYEUJcRZPwXn5VAwXm+5kWTul1n1iiUjNKxR1cZJuvrOF76NkEccJfEfg4SrWWCOO5jTEgWRRyQtm87nN5QW8QsMDSemc05Bh/zi5GH61PxSf6OpzGYx/CJTWb4hUdKFjtcm9d/vyFyJV0QNE1E9Y/EX1XxVdGDy0V5K/uA703s7eyAqz2zBhBmWxy/U+a8QQ54RQ696pH89oOT94xplcDAnqNO5f9Xhr2cjo+fdysMc9TVhJB+jt8QXV2Y8O+FZHJ7cFBijxgKtCkQCiJx5BoSaqclUK4CI/jqO1tzDns1xNVUmGV9HLk9pcRZ6eD9O0cotcnrGwEBRvwuaQwoMyKky6UYrhRLKf2mSBvJMQAeqWHsTs9c5ZeY055UceC8W66mUpRrXpd4eV6kla8dQ9FuWimZz4BcH0xemSSMuSwudgUAEKKs/iaNEfnmgZ20XalwGjPY7VP/dJ1sJ+UhvKCzvXjNstDwEFfNgh7hvNhGnMX/vf3176AA+68wDq7rx56cl0C0+IobLuOqL/7LtB8GoavgVdyGkap0HrkkTmhHfI5z531/cxLnDTMy4LTc4Qt/peMv8t1HlGT5K/KZjJo4gLNgKSKvX57924Q7pkBv5rHLmV2PHHIggJU3iS1Sc+aq30YBjWPwCKUE8fricGdTtiknENK9KK902Uux8Gy0T8gXlu7p7LNp3EpNGc4Jl7c1pF5mhfAUmlF/eFRkrPjZTthj4KD0Pb968F/weWZwpAUxJZ6E/xsipk2pp1TtQGsRRL+mTWgg6rsoyveynWxfW2eMXcvAoNufhUrunOrobEsNqxD/ScZFuoh+chv4mvus4ssNmpRt/68+pAS8mq3xAjpg7AXR+i59pkcv5jny20d/74vli1SnF6VokPmdBAxOfoNzQi0rd30HXECal0FUFsBikzbEH3ecEDRBVxytHmqv0jX8cGSbvGPcdaqubGHZChdmyOY1CaTwu0CX9chnVV9rreOXUKXt/GzZ05c83UtQrYwrAcx2HWnCrC+ZsF7WijLbvRYpYKhn6nIesu31BC1+91GbnbCv46sou7FrXuLFbpKmgduGQCBrabCYdp9agErxYVfbSjoen1DbAGRaGSld90Ue6SQQPXeyeEUqfaEdqFXWM4JsaQH2WpAr3RBUFUf52OBB4J0nUrXl5TyO1e4IbYUk3fddJCWNFfhlzLqfUFxySfqsLYiQ92uJR8aEBc1lrjBVHZ00tngkeNyhgYgH4rQoyBB0Xkao2QPAh8NRrSiVENMCO3inwIlyZrmwYxDYhdUmHZieCagxBQkdBZXumvctQw0z1jkx4np/II0Fvugnm964kwQRv0i6czYhsjJoxvF0Bf63WM8vqAJzcnIvQ9/jhvP3PzG1bZRnZ+rJ7iTtuTT20AixsmALFmMK+wNU2W4YqmAOFvfjn3F8iAEz4hwL6ufF5vxC9t49kL2BVlSP/NSuQeQuUAKWvNyT8RQzyUsUtF8l8J4nD/Qfpqq9PPA7bMLrwlRBlPf+703mdWmUOvt5vvXj+MeRFRy7RzVkrTM0YP6kT5aomuIovBUG3ofmzdcGL/MQhYrD0HlrSWbx6blZaNgjzsRHVnDxoTPi3gElnL/h6MJSjsnGHllsAPrXImw7LKb2M63om8HKsBJzsMVtG0kr9zXR7U9Fq6m8mS7jIIvs5E+qfbEfxfIiEf2Zlm1QuN3MkAETNEJbzpXn/1z1K8YwNsu/bWsMDTrNMBR9HwgPd0HUjno+SGbn9APfdqRF+jFqO+et33rw7NkIZ1wvbIVzFI1NPeU62X8bEBhqzcGE45CH7NLgd05PESU/Vsm2g3AKuSTq3qGGXbTVdTHgmMs7E+X9h90xlRuEgH7XbJQ6gckCKQ+ZC0yxvZZ94YLKUGsix7GKSqs+viPJtN98CDGeVTj2GlAyBEj94LEkCwT90G0L2InMVG6oJ5VA8G//cgjopc/HvSbujdeR83sY3bHPzpU/41CmFPjBOBH+MVatKpUd3ge+uU7yE+A48v2nucsy3Dn+Pk9Fil07ul+nCSuRKyOpJtXbzZ3xcpf+rBf9wxa8qCn7pd2cz3fvKWOhdHlRjKpX/ninqVqdR/cwAFiq7zfnZTDaqchLcBkAnu7NOPlACJr+rlABQR/k6L5z4gmYxuZW4c8WYeiTsrVEwLzZ2Pgbafqjykzk11tSmYT0mVPpsEgnbUcq+lx/H//N0uOjXkTB9NnB3823YNLT/6i+ANEs6kADUirnA+3kOSkvEyQQ8Uo8AT70TaFprH/K8C+c35slPo3+DHKFtD1thYWnJnGJJfJ10OqQyVrNxe8jccKcc37MNoC7OdE+IQVQF3bfP0Mqwp5cIVFwlFyaiHakvRo5hZ2bTYm4E5+kuTvwI//kuohb1LVQCmuBYttAgnh+ftlBjyD1/AUEaj0Kq0kQRtC7lMa60IpqFBSLdvnHj8KpZEu8OTgzgex6izJ9dNz5jJyw5sMAsG2IIUm4Z0gZCQr64olKYgBLGkcj3ghMwOEh1Dd8YG0GJiN5b2AcJUcYiRpgoggtUOnzgHPI8Et2+g6c5aPygS249mU/xFdYiUk7gjRWqV5EtTiaPt889pveIWO6mUDKvivjTSb+HSlBvzLvR7ed5Alejm/MH296YA8YAKFrMdcoEkuKvmNfIXRVcz1zf6JlpexMdTdMEyWPyiVfYtQKONfek4lyoVGgqAMpMR7qQwCvtOTTl6dQv5aQnAPs68R2/K2hheAEmxQ/WF7Zeyy5Az1gY4YaJR9nDm1mk9Ro56d1XUTvZMlbk5f4OSfIa8AIcsTbE5QkWbsR0Bh/pUebpRKCKczRaWIdnfH0rcvSgNk/fNpb7j4xUdo4JUDlD/KRw2EUsGGxiuwzKn0RerOURcQ/RDN9fH3XjyW1GQ3ETFhkbEAPGThqDsaoqYhS5iMSu8tacq08Kn+OuQN7yzrJ+KRh0w7GPutbOj0duC41yERzwefWVKNApSQiSs1noP31VVXD7jAi45DXSoHU071mK41lX2OkRnRiOGuzfwNYWryD59oGpbODdwjgcjPZvSBiQhQxqezavrXyDZwIbey2FrYnULZuHYty9tpi13GO7G7xNlkfo06cl1VFYrnVmqMp7C26A1IMiTf/lQqFUmgTAtUVSjcqwKewauH20WXzco2JcVBAfMOqf7iilsx16e3l3knlqElQm8g3BAF0KfEVV7FdWMKZKuBoDwQ0Kvzv5PSuNji5KGb55HkHfR4t9Id5ZiCMNhWuLiIKvKPzpE3ALqddBlGwEZS+5jLVhy56wssIp3ojCcuOXeGrpzgZqSGr7CTNgFLfTSZDOa9AGmgyPwaYWYQG0JjIWy3vEWmWpSVAsZa8pSnGWAL1P0Pg0xsxtuZHLRgdh9yPWn3I0t9ROihEAtpfrI0G4LP9asn/ybcsAAAApUGaIWxCv/4P8LgAg81EmSCFjACQStZD8HTV9v28spa5UTu9bjxa3E0yzLr//4Y74x9Ajw552Dq7Hvy7BNhqej+QQU4cBmoNc2SxuV4kEtC0gd4R2UXH7rQk2FFseW21tZuHk0Q1Mo1VPnkJjxN/6ETX3sWHldQdmh87T4cCipFoT4cM7QiYTJ3LiCB7eNaGGDRvRTubFpfShcvsEdKEvzbCjunkbwAAADlBmkI8IZMphC///oywBzPlbAAumFSw+SR2S86iLEkH8Q2mkhfT2aqVBob/DBvg5V15lrra3YGqcXsAAABmQZpmSeEPJlMCF//+jLAHM7i2s+4fRv376ABddajDkEBS0zHpI9zv4DpOSOBprlELxHjCDJpfvH808QioSqxFy3EaHof5ymb6MrngdK6WJEJCnDCHagY6eH8AR6avMiCnSycEl83kAAAAS0GehEURPCP/Agr8wmTIwj49WABOytus2L4AD3c6ItH6tHU/jjXE7z34ZnZ5nozszs+0FeEScb/3dWBErXZKxPIM7E3J4xp3S9JsEQAAAB0BnqN0R/8BxIfWFThXZv4/bvdm+IOACH5ZBFGNwAAAAEoBnqVqR/8BxMlGVG9ON+5U2atAA7QuG6zMScTeSiNgldbmP8dTqtipcQNEZYtr0VgSQ9LwLbtMaNoXqizPHmZEmBR7a1bNHpW0gQAAADBBmqpJqEFomUwIX//+jLACE0apqDoFhYQMJyfXAC3DSYEJaS4VAUkETGPPIVza9+EAAABOQZ7IRREsI/8BHimzwcnkV/IXEC3yUvN68AIUtE+9iDXPw2ylBbeiWtVsd+lno5LT9XpFnuFW4phOHN1IJ15SlZmW/ihWoSSJVcC1VBrIAAAAHQGe53RH/wHEh9YVOFhHdJndGluKsAIRh6Y3+uHAAAAAHAGe6WpH/wHEyUZUb07VGB0Qbb0mACEyrNBJluEAAAB0QZrtSahBbJlMCF///oywAhPG/wUc/QAbGKjHtSRUC5r6DZXKe3t7GZEYCuYHvVhFa2JmKEFhi4Nhf44SH5PygYhEGhfwi8YxA9gXhLzqq4bpG/YbL2kTQWbmK24uzc2NNupwglmMEIAyKhLKSRv7/wH8PiAAAABTQZ8LRRUsfwHF7t26pgGdUQr4PEAALI6C11V6i18iWx8hry+0nMCSBEOMYxybCVsBN8GowbULh1k4Zl+hPl5KFXBNTvFIeVoXfVFBrOrT8oXs708AAAAmAZ8sakf/AcV+lNKyD/Hy4kxUhwABsT0Nh+W0WOOWWVb9uoB+5iAAAABzQZsxSahBbJlMCFf//jhAB/d/5y2AnZoAD4Jps4Ht72H2tXZcgcHdHKA3Edqo4VcPcOeP/tNz3LHWvrgXi8QlG4ngZhW8Zj7+jErirVC1epLGkRpWe1VNmnb4B5cArsAFvqVBRIvxiDn8kfqbE3BVRj0qKQAAAFJBn09FFSwj/wEeKbPByeRX9ocl/YaZDF9sACWsNkbW+Ih7Q2Hr5P+iYErWblObrIq6y1GbTouWDrDoF22841I/d/KpZ4avMWnw1f0Jlu5NqRQRAAAALQGfbnRH/wHFr4pDCrDERNjAa3CACZXq82UGIwEwu/yjuEyvM/Fk+f0glc/lfwAAAB8Bn3BqR/8BxX6U0rIQCl48Fl7IwXr7/ABs9aAsXDbhAAAAbUGbc0moQWyZTBRMK//+OEANbO2YvntCZxggg689wJyMABD8+Ss75JwMaUOxMwMvg+h++Ar48fl27ZU302kNwfi3qK7ad6gmgt8V+gyp1veKSdqf3TeMEnEuoy0d02xmjomAWTOXLNezZtA4PnAAAAAgAZ+Sakf/AcV+lNKwDMLeFOgFRqDeVAA2etAWLFZqerYAAABfQZuVSeEKUmUwUsL//oywA3lVN+tjqgC2Yqi477p881Q3AAp8sbFP4P+uQEotp4664It2iKYb7Ef3dsdXkJ8O7/stB6QQaSSaEO3dqF/Z3AOsH5s4LI4NO3IgP43+E4EAAAAdAZ+0akf/AcV+lNKyDnju1G0xkvEQABs9aAsW/1AAAAB0QZu5SeEOiZTAhf/+jLACAAtEwUkABqvDH2xRVPAT8sK8UVLwjYrQVOPgHagbThhyGoP1fNa40d4XsEz5BGoWqU4tqcmLQVqrKeziQ4FBuPTbDSfYoUdOGDS+2ibIRzcKj4kK+GwNKgkBQzl3CXqggyBU8H8AAABcQZ/XRRU8I/8BHimzwcnwyyo40SOg8OnznyUPP4AQjpWoUrjj1cAr3SC7xM1C2NljKfWScG/iDO3q9QXkzOToNTlKUMTIlUR5I+zwZ5qGVKvERBfREsFo6rM73FkAAAAcAZ/2dEf/AcWvikMKpxQQN5yC16UmACEkFeBX1QAAAB0Bn/hqR/8BxX6U0rIOHTzRFqIx61QAIfKwmB3+oQAAAF1Bm/1JqEFomUwIV//+OEAHy1VwNfUIATLH95+w6G3jcoF0VTf2002fAvR8D/sXQkqdtJqMv72w8vkp7BfF9hzd5fwmTD+LGrbZL4mQdC7qkmRsireqgDYlUuoeCZAAAABWQZ4bRREsI/8BHimzwcnwzRjs5wAfg1gD/0oc/mUZJC34+N2/uaEyf8oIQoCUKwwbxF4AiWSv83d5VaY+SVosRiN8LjbZKBVWhUbWKBaOVgm5ynG26ZQAAAAjAZ46dEf/AcWvikMKpxQBCnFQ/qABD5WEwOeXtC1p4Z/+AsEAAAAmAZ48akf/AcV+lNKyDnjxrc0yf5aEACH4hCwU36JI3NnFJQAD9MoAAABrQZohSahBbJlMCE///fEAE26JtRizEOMHIAS0gu0s4/tFFamcEoAq7lhXEWJ5M3jaNuZpR9yNeBIvMtzdifTDXzQ9QWeO1tuXt4Hlynx5EN/qEGnVXjnRyIV5BWnh0KqlR+f/WvoY3vEOsMgAAABDQZ5fRRUsI/8BHimzwcnwzjyeOT/9iUQAU3XMrk9FCGNbZztP1OJ4TOqqL9Tngs4TCN/+RvG9tuAX7SOlC5bkQk5NRwAAAB0Bnn50R/8Bxa+KQwqnE+XXo7dcSZoAA2etAWLAKAAAAB8BnmBqR/8BxX6U0rIOOZEsMIUgkk8AAhnXbDHwNhLBAAAAM0GaYkmoQWyZTAhX//44QAeTSlnjhqACZwqG5/U/p4YLx03EPlywQD9u/8WgIqtrFEHQ6QAAAGVBmoNJ4QpSZTAhX/44QA1tmNhCHFbPP3N1J18A88gAiDF6faEfFlrEIyBgpSlUWGWclh5MOwJRNQyFIDZmir1XUOyOWeWX7324CVyzrz1eeyD5knDk7CXaO81BQVNzuvrsPiQn7AAAAC5BmqRJ4Q6JlMCFf/44QAeTSlnjhqACG9QCgeFv35PSQrTFk2NeEzawhSVzQ/bVAAAAUUGayEnhDyZTAhX//jhAB5s6BraKNYAHPvA6f7jJvRYFWgtFQVXpsVougv7WiQ9lLA5tRPC9pp55RVMN/ScQy7WkNZRZYwaIpt5qHtwxT4zodAAAAExBnuZFETwj/wEeCjnPkUs/Y0NA6nY0NROBaYwAg8v67Cp7ZIBQBV9+d6xWho1h2ifdn5R8uCo+j3evwaai3GupLsCmFB+m8fHWv4NhAAAAHwGfBXRH/wHEh9YVOFG4LjqctnCyAEGq3WNiOY6clIEAAAAeAZ8Hakf/AcTJRlRvK8p8cVO2MESEwQAIfKs0EmVIAAAAbEGbC0moQWiZTAhX//44QAefVXBnB0RQAQiZQ9dHWrk06AHE8TEkEcHv8XHY0uZYe5ffG9IH+EotyFg9RIayMDX8m0hZb70raAIBtWLJQuh7bZ8kV5yohJgQzhu4chWCuSgFlopry8zHQ7+iRgAAAEZBnylFESx/AcXu3bqmIUpX4vJYNWACXYLpXAvO5BJ+gfCKvVGLXq8n6K8lCWIE3BHaM+03gPJMsOIogWDPOO83jmjwwOWBAAAAHgGfSmpH/wHFfpTSsg6TD99DTQDaQgAhMrCYHHWjSwAAADtBm0xJqEFsmUwIV//+OEAHk0oucyZa5IASRclaOMVnBuCpPUt3/8N8r4R83OfOmgsEnC84bTFtpP8FCQAAAHBBm21J4QpSZTAhf/6MsAN5ehQmRdZGhufpXRvPgAbFOsSuK9jTqNbL/boYUIGe6qiBYeRP8WI3rjtUbC5BKY+TQULVoicimqOggYrYWpsJKM0mqBRAMwgnDhzkWgW7kmVpWODquf6n1ufOUmuKv6t4AAAAbEGbkUnhDomUwIV//jhAB59/5y2AnZoAD4Jps4Ht3CH9U/4ywcHe55u739m6NasemTVe+cEgwbyLAFPRAulO2F4AHjaV51bZbxfzKmxbQ9+1sAQHcajTgGfj3fA9SngsvsnwRgSnwbbgAXOVgQAAAFJBn69FETwj/wEeKbPByfDMBJ0E3gtO5WzcgAlqMHmBEXb9OeS90HEbqKEVV9+GzGz2x6YhNB38eq3hj+JysqvoMbxdMIgljxEtOdrcFqk0Ag0XAAAALgGfznRH/wHFr4pDCqYTyV4nKiAGAB+BZA/w3/j0U1F5p+HxSkjpuBtxyN5CgaEAAAAgAZ/Qakf/AcV+lNKyDoZMggSlj2/SANZtAAGz1oCxXP0AAABuQZvTSahBaJlMFPCv/jhADWztmL57QmYLYIOvPcCcjAAQ/PkrO+ScDGlDoakolVWzBoqvkYwi7Yxt/ZNH1lg+9VKxfDffVgzaevFwJoM1CIdGC8H7v3e1l9nLtMZPR5f8hBYOV8HOa9/ZI01tZUgAAAAhAZ/yakf/AcV+lNKyDQqRLCLWXsh0RE4AIfKwmBxWano5AAAAX0Gb9UnhClJlMFLCv/44QA1s7Zi+e0JmDTi2POdnCprMgAh/6ekny/12u9pqhHT8Z9yFqAyxIFYZWMTjFj+GFz0xng2IlvilfnmnfXOXh6P1/fz2y9uePAIzswkIz1tVAAAAHAGeFGpH/wHFfpTSsgwWx0XCT2QggAQ+VhMDwNQAAABeQZoZSeEOiZTAhX/+OEAJt0TaFWzjl6jVCKm0AJbeCJRzHV3QGQJMtWdB5LVU3x0+40ydmLNsKdKufLqY3gZbBQfjd3Vsrzw/gYfDeG43GDVcoCasthSD8zFqsn1KwAAAAChBnjdFFTwj/wEeKbPByfDFql9nuX+hoie2AA1t20D1WeLkpPIhjyjRAAAAIAGeVnRH/wHFr4pDCp7Ft8lIEqJqhaABs9aAsWKzU9HJAAAAEQGeWGpH/wHFfpTSsg0xcxtnAAAAMEGaW0moQWiZTBTwr/44QA1s7Zi+e0JmDAAn+xONoxYEAE6zrF40LH3APN8hylbJcAAAABMBnnpqR/8BxX6U0rINUEbSoGPMAAAALUGafEnhClJlMCFf/jhAB2dFeyoTYgAugaqnvhYyacuCFqy179fAcIfbUerZKQAAAGJBmp9J4Q6JlMCE//3xABJY8bjdEzXwAEqhaDDWhzdcJWJ3Sc7B6UqZt0NpHLajJ7YQsEoPXAfaQn1kzB6VIA1/Y/AbrcZKpN8nGvkFUuqGr260jGu62GE+tn2gExOfg69t8AAAAFhBnr1FETx/AcUtQBaRLeAG1Ll/96BHCunMGkKc+fXUfn6R8P1M/7aGQ8bf4glw/xOPeP9sReB5uoRMpz4EgHQfu5FmWS2duR8l0XzPeODAABIja3dH6Q7AAAAAHQGe3mpH/wHFfpTSsg1anuuApnfFLAAQ+VZ2GR3dAAAALkGawEmoQWiZTAhX//44QAdnRXsqE2IALn8A74MJFPwokpFBlPalW3mixPXbe74AAABlQZrhSeEKUmUwIV/+OEANbZjYQicvlxJ3VpwniseQAfRC6J2xW6Lb/pTAmP8fXykDJCtrctSWnICr/lMo9Nkj1tYhCVhTX/z0dea3MvYU7nsIPrzuw+W6ygvr3FaqxzxONPM9qoEAAABvQZsFSeEOiZTAhP/98QASzhwj4AbZZ9j6/u5akhV8LnTDAwfoEVvFwu3sufvE6p3+CPYkEt/6GFHXhuupAMZzTkkibIoNA8yc/h+jkPLSoy9LtsEdo8ruJrrYWSQhZwZifFfGReE5xcN5MWc3ZX8NAAAAWUGfI0URPCP/AR4ps8HJ8MewNU8ACU+4vpAshUpFJHqwul+HOl4WRrQ04hnHaCEOA5lFxx9MY/WMgXFfWfP8UfaYO4D6tVM3ybQoL1Kjy2T4fGUuj7VArlfAAAAAIwGfQnRH/wHFr4pDCp+rb7Rj5tuoAHynGu+mG9lKb3p82vkvAAAAJwGfRGpH/wHFfpTSsg0kBnLINEqABNn8NHVAslS9RgkHsBXpLXBq8AAAAENBm0ZJqEFomUwIT//98QASzmyOuuwsvGcAEsie0KRp1YnLxkFyjuC/Y6mXFV78q0w7h3DFARVObT3QCIsTti0TI3eHAAAAaEGbZ0nhClJlMCE//fEAIMjr+c2OFQn0QPbagAtT9ci+w+WITT7MTZYeibv8VYw60lOcF63NoR+E27WaHtSYb4x5ZA6yT0YeDyUjdVJJhO6lyHjfKh8w8CQIQJqV7Uivju7+15se11bxAAAAKkGbiEnhDomUwIT//fEAEtpHC27ePMo207gBbfxotJWaR5PnzaBeH/e/4AAAAGZBm6lJ4Q8mUwIT//3xACDI6/nNjhUJ+5qzy7X6UgAfuoQhHnqXLw0a1AwfomIx9fj/IAJi3QMyo2/O6yPbOXr+vf4F9BpFsNYqI31w4noEYWU0LdvFY5LDIklBsxA8/IZrIP0W/yAAAAApQZvKSeEPJlMCE//98QASyYXmcTnq8ksJufgBbeNiHwcYsx0DDwMqGfkAAABvQZvrSeEPJlMCE//98QAgyOv5zY4VCfnIHjtgEdQANqMoekrZE6lVTjwbgukB3DJGCI6bKK95/nX/gd5SPYJn0oIg6AiXanH1eEV1HYkGMK5CbiFMx7N3FNrizqNiIXvQJu6wxVlVdj3WEvBxB2agAAAALUGaDEnhDyZTAhP//fEAEs5s7z7pfAFzgBbhWuj/iuN7HhQyyD8ETvs8THlhvQAAAFBBmi1J4Q8mUwIT//3xACDI6/nNjhUJ8PovVIjszMw4gAbFhBHKb3k8vl21agI3XZY/y+5ybJ+77DVfXfvVaYB6YQjkTOmPXwykTDa4fgB+wAAAACtBmk5J4Q8mUwIT//3xABLObQXRG4AAtvXXpiB97X1vpWsu0jvh7vWAnPCxAAAAYkGab0nhDyZTAhP//fEAIMjr+c2OFQn5ndcTzLACBXjrb8x4PAOrHe2lIuWv+PXII4j0L4wm1Q22iq6s4svLFBnMZB0RLryUrrNNsVdNd/fH9RS3pQFz5/8iVO7Fv8iWDn7BAAAAMkGakEnhDyZTAhX//jhAB5NFeyoTYgA4s+SfBca/ULJ03h90LszT8nX/uDAnw56bEthZAAAAWUGasUnhDyZTAhX//jhADW2Y2a1ADYOl0x+TNIAqSrhwYhymgRC/Vu2OA33VGraDhcZUPXFtZGMyh0W0pKhcpDPpQ+a6VQ0WVx0esr720/yN4AgmBGqQfM1BAAAAZUGa1UnhDyZTAhX//jhAB78M7dzgASpK8DRKf+l2Gr8EZvQKXMaDho4WTr4n37AkbizI1kUssjoP7WEnvtHapRzwtPu+vOIVlak1MJYkDAXtPNouXIw61BkKd00epIy5rhGTqiMgAAAAT0Ge80URPCP/AR4ps8HJ5Feuw3OAAAt1n4SVdjLwdlSeftevUN2Pipcsp4vH1AWD3LChw6T5L1VFk25jOSXduaOMUN4CieWpnhLb19JppOYAAAAcAZ8SdEf/AcWvikMKpxEwmFfgkY6wAQ+VZoI1uQAAACoBnxRqR/8BxX6U0rIOeLTc9xjWoAH4VrzZQYjATC8MCR3seJW8JQClUq4AAABvQZsXSahBaJlMFPCf/fEAIMajIiUhYyCTzBkpwAqp2t/FbyvS3T7eAn4yDRngrd1X8+8G9shgnmVFqwv0oNketcChLst402lb19ga/btRIlMzhlIlZlXG0FMqQ2Yy5BeDvZU2zRhbd+UjFDRnZGbiAAAAJgGfNmpH/wHFfpTSsAzC3J76KKKVwABs9ZdEo9lkaDoNglRVd+nNAAAAO0GbOEnhClJlMCE//fEAGQqcM8ilGG5dH3QgBaranZzxOKLWMZqeJv1lNX+qfxM/FTw2H2Cty33NoeqBAAAAa0GbWUnhDomUwIV//jhADW2Y2EIcVs9BpMb/6b+94AJy74DEn+jaHGZlBnB8D6tm0iT98kFkscWYh5vCXHTX1ikt/Z01gvA69z+WUBWLmQBKrHYU/5BL/YwCg4PUukaT4MzOEN2/v2z4nwhVAAAAY0Gbe0nhDyZTBRE8K//+OEANbO2YvntCZxj6pATOkyMAIQ4uh7hzJ5gxTZZk+MySQwV+zyPmnR8V+TEhE5AJCnwbanlxpWa1/e6uzYpqzioVMzMnnHJXSgSrb9jwX0taEqPJeAAAACgBn5pqR/8BxX6U0rIOeLVEBsnABDb1ebKDEYCQ1hfpmRzvkLvC6RbSAAAAOEGbnEnhDyZTAhX//jhAB/d/5sItyQ1ciEIAE46o6bX6zaI0luhUKUvxWjgFnnnonztGaO9AX+vzAAAAYkGbv0nhDyZTAhP//fEAE1X/UBc4AHu5IXE2VpDVRjweiFJRx0jQNWhMMgdvNLSA8Kk5pqJFUecXHwzb9TpNBde98Tj9XleNbBLevzIEBk1/y61tlSA4U8uSH52HVfWAfIGAAAAASEGf3UURPH8BxbiTleQCYf+eamvcTCyIZAikcACdpf4Vh2rD9P0dlAHO/iHRgrEKOq88svIWbsDoWvnx6jUnEsTt5QXbDzVHoAAAAB8Bn/5qR/8BxX6U0rIP/6MIIkwmKRMTOsAEPlWaCTF1AAAAN0Gb4EmoQWiZTAhX//44QAe/RXnjhqACZ3krR/TieZDWpsbeGMEmXyRmQkCPVdexdM0JzK1j8gYAAABkQZoBSeEKUmUwIV/+OEANbZjYQhxWz0c0TcpYLSVw8SAD8PFqEPHbZs/w/a964LV7J8spfvjXKEgik9bpvU0ZaOcQDiJnaqKseB4mLOS5kewg8TmkhyJ77sC9xe57iGcyoYvrPQAAAG1BmiVJ4Q6JlMCE//3xABPXuCPgCHlfsxf7hRCW6L5DZUGFSjvAHR8xKM+uy5/MHeqd/RILpRH4Jsfi2ewYMCZGH2pNjIqLA8yE6S86+oXdUvRSV/G+vUqDUksjiCeyRYolbkdbzfns0XN7rG4hAAAAWUGeQ0URPCP/AR4ps8HJ8NCkwewACoAWsYtTVSUeWbXNBtQl16iyAe1w5dA8mxlHygbLB+4b3EjoIpFHTfp3QazsGrSz4EXdLThbIQw6O59NeghJO5hx27A4AAAAIwGeYnRH/wHFr4pDCrDA8dvyamACXjN2TC3Fel0Zfr6i2sRxAAAAJwGeZGpH/wHFfpTSsg/xtN0ECVAAm3KnxiZeZJEN51+wEi8NWusjgAAAADhBmmZJqEFomUwIT//98QAT2BVptA8T5UOAC11CIAnhjMxP+qFgKbAG6R4VPYkbHnh+cjIox/WDwQAAAGpBmodJ4QpSZTAhP/3xACDI6/nNjhUKMN422oALVm21yBhDVGq93gNljrmLeRIEvlWPT7VXsvBa6d1VSLHdKe39BwrNa0qi/H7txRMztGSiN3Qhpj30AyWz5s5NsnCGwfTQlXndlNZtuzZBAAAAJkGaqEnhDomUwIT//fEAE+avFe0T9yfH7kAC6BceEdQDyqpN/khaAAAAZkGayUnhDyZTAhP//fEAIMjr+c2OFQo5iDPLtfpSAB+6hCEeepcvDRrUDB+iYjH1+P8gAmLdAzKjb87rI9s5ev69/gX0GkWw1iojfXDief5tgpoW8ysXq+NaYgZUDBmhbSSOh/OyqAAAADFBmupJ4Q8mUwIV//44QAfpq9ABLWc4eIALoLpO/nenFB9HMms66QVGwDh4c9NxMtwRAAAASkGbDUnhDyZTAhP//fEAE+gGTOXeABsjJxFoJgbjI0QP9Ix0FwQ0HIyWZF+UdcFaLNpCBMI0ObBjX4gz3EL4JcpHhktxsvIo1dCEAAAAIkGfK0URPH8BxbiTleQKWTBN+aBDHiACdSecPzpaOdogW4EAAABIAZ9Makf/AcV+lNKyD2qqhFdmHAAXq9ajAo6dqIKKZ5ac1o1LSZFE1gLfv6a/LsE5+RPrLxFi6clwaw1be7s5MUr73zm7N0OAAAAAMUGbTkmoQWiZTAhP//3xABPYKZoOQ4JtLxCGpVzGSM+aD7e0V5rVD+erGrvqRqCh/sEAAABvQZtvSeEKUmUwIV/+OEANbZjYQhxWz0cxLw9agYgA2nyU+0I+KzpkTqjAmLXmfyN0s0khkRhQ3ps5bhujdPGsUJB8FCEAntrmJZIsJxZL59KM+QYZ7E3JekWneNoJQCbGWDxIxWZJRgi2+KHYyWRBAAAANEGbkEnhDomUwIV//jhAB+tKLnMbru96+ADivE9IfUNJuInEx7CKT4zpXxwhFLSQAT/uSIEAAABjQZu0SeEPJlMCE//98QAT13CG4QACIPLfRnY3wmh0ml6cTM4HCmLlEk6523VdN9dnHPS47M6GqZv8MJcpBlfn9NxLftNd/tk9VW/QgpvA3zP/dVZ5sNtyxna0a5Hr8Lop/bsRAAAASEGf0kURPCP/AR4KOc+RS0JHJ7auAEqQCN4qWH6DJPZitBaCpf1nA1hfgpjD8o5SpP/lf4kA1WP6dJpCjcthi9bZZuzivR/j/AAAAB0Bn/F0R/8BxIfWFThYR5cZKiMJZVAAh+SLbYzCfAAAACYBn/NqR/8BxMlGVG9OdVjb2+r7/UACdZIttlsp81T/jtWjQnoagQAAAGJBm/VJqEFomUwIV//+OEANbO2YvntCZ9CpW1VuvV0P0eABZgWqZuOg2P/1ZYIyTpbdH9j0yzeNhCZo2qyGzqi8avkzUF20JhGCmTgSoQj5YhN4yrVOK6SA9PQWLU/MmvlwWQAAAGlBmhdJ4QpSZTBREsJ//fEAIMajIiUhYydv+t8rhd+KgLEAJQiCyNM8Ephe9G/s53A08nkRk4my9ZK/tDJ8P7ClzQzW7GCyaxs8W+Tmr1N82ej29ZQ/yuq6bW9ewby5SJ25xUT//T6bitAAAAAdAZ42akf/AcV+lNKyEApePHXP/AKmAADZ60BYq80AAAAzQZo4SeEOiZTAhP/98QATTnsB1MSACDMNvkV48Wfr52//ns4pJW23DwchBwyeAEVcr2yxAAAAaEGaWUnhDyZTAhX//jhADW2Y2EIcVs9CGf/tAA7maibM3eN9WKYEBrpJtwA++uJAws5gbncu1hIhyXadvPJ7/7u/9TtY6QlbpAaQYVBmKs1ZkmvVaPUIk5rUj3a9VX+V8PJnlWkq2SwHAAAAL0GaeknhDyZTAhX//jhAB79KWeOGoAJxcAVokw1z3dPYz4TBvNSp3x1/A6WAF0LQAAAAYEGanknhDyZTAhX//jhAB/d/6DaT02iiAAt7ldg2B2ffqh8jUgt2aFnocL/wpWL8O5ssRJvth+O2Fuze1RhbtJaE3xftoTfwkrssg2UBUNdwqywM7TQ2rJ+X1/fmdklioAAAAFdBnrxFETwj/wEeCjnPkUtBwpRL3uKphwrpi70KQAAbO8D3AvgB+YyD2H6T+jasWiYRZfyjf/WeZ5A2pCMhFFWAqsl5h3goMBArudvqAJRaLhFmnxH0EtMAAAAfAZ7bdEf/AcSH1hU4V8U93+Y5XbRACHyrNBIhgkpfdAAAABwBnt1qR/8BxMlGVG83AQKsYOSPhwAQ+VZoJM9QAAAAakGa30moQWiZTAhX//44QA1s7Zi+e0JnNPW7SwARB5Nb6FY971zddIpd39VpAI0YkopPMpjKTfHlA1+CivZVlqcXF+RhLJkXnP3IoAQ/IU7pvH29MOfCJedUmmYLAogp/cLBvwU6BBBF4H0AAABpQZrjSeEKUmUwIV/+OEAHxCvWMtv2cAB8ZLmJNpfE2rVIX/+G4hvVJZh4rAAF5ac39/IO5SEPHh8Q4zjA1i1M25dvCjUsvtKQ6jnOdlh5e/YvpyCqlN49hgDcfZ4u9O5RnzKbZqlefojIAAAAWUGfAUU0TCP/AR4ps8HJ8MxLo94UCXAATb93Dvy0PyA6CzcGaGKAQLeVzNd7u4jxGMx32y9/mq6TrMzrbB/baW4BSR1YELpLU4JzcFwFGFm9LBfv2o+RD7UZAAAAHQGfIHRH/wHFr4pDCqQCm7jvlRHqABD5WEwNkNyNAAAAJwGfImpH/wHFfpTSsg548a3pnBAAhuhKKuDI/qb4B5ev2WW7JqwajAAAAIBBmyVJqEFomUwU8J/98QAgxqMiJSFjH4ARyBrIAH4qbUJNTE6HpHb6p4Ju/uzRT041x//dfl/bmlhluBYUNRvXk1GF7MIs9zWzC39WdUXwK6VPYz6PmZ7wz9u2TooZgQ4Dq1UMAujtY8wfRcfboy7eqwjvUrRSuUS03lpSeAQrOQAAACUBn0RqR/8BxX6U0rIOePHZ8ZwQAJxd977OXBf8IYOceT6dtRlKAAAAJUGbRknhClJlMCFf/jhAB8t/51/w3Ix47bwwAIaH1mUbqdtPkdEAAABuQZtnSeEOiZTAhX/+OEANbZjYQhxWzz9zd1e609pQAJldSXLKWxyO1/mKOZe5uOW0vfm5Buob2fScMl/DCcmwiHPB0TLcKe02igC1MhqKChhWcyfC+VO3fQcxCWYg1lbm82QK5CT8iiIRn6Ua598AAAArQZuISeEPJlMCF//+jLAB8u432EetDc2eABfLJUabaraWQ7RSpHCBbKR+hwAAAHZBm6xJ4Q8mUwIX//6MsAH11plbzGrMEoAGjepQmDSeZl3ia28XxEGdO0VTXmUebuQWpyprFkfX1cn2OLfyagaBVzCcCtJU+xfkSJEpQLEyYboxm7TVL4xgBV55KIaXyBehRRw9xC3R40jXBW4H0F6Vd0i7t8OYAAAAREGfykURPCP/AR4KOc+RSz9EaB+dLNjhYANiFywCRMqHSabSv95Fu+d7Beq9/+dbz3Bok4QY0IS4WG5B6smzTKpVSDxhAAAAHgGf6XRH/wHEh9YVOE6G2kQXd2eAEJlWaCRqi/ouGAAAACEBn+tqR/8BxMlGVG8dAmTebMqxOACG2/QFhSbv6WrRkhkAAABzQZvwSahBaJlMCFf//jhAB5yc+CFwcEAG3mcFmE1RFh+qlpcGkt1Oj8c03iFUcaj8QqluTT0ms5uh3Qlcw70MdUrqfrIsqMSVpNb3PPskdXRuU+lhFRtZnewBJ57N7FwbIvBD5TJH9B8yORxwwOoIRe6+GAAAAFRBng5FESwj/wEeKbPByfDD92zukaVQrl2ADZdX9a9cijqWTHnJfr6ckO0jHkh+cpi4RgNLLvrOgDR4yuuMmkyMonVa2J/SRLHMBCze3vY8yMN+VY8AAAAhAZ4tdEf/AcSH1hU3wmKX57G7KgAbELN0zf1/zjNsHj2BAAAAIAGeL2pH/wHEyUZUbHxLnlypZiiIjbqkABs9ZdErsRXVAAAAaEGaNEmoQWyZTAhP//3xABLkY601Pq8AJiL0vB7Oc4AvIR3C0otTgQW5HQ5zW6zQGwLD7ytvqa7u2EkZFF48d0bddlzIhh1ADn6fcfXVBnRVG5ri9Qo4eOcrwv2w6UNKQ3xBngiIf5N7AAAATkGeUkUVLCP/AR4ps8HJ78COVKq6KoAEqQCNyFjNDqP078Rg5R06mMXpWjwUSTGREsBiZM82aPf/BGnNq98H5672TQIUsZZC2V1NCcg2TwAAAB4BnnF0R/8BxIfWFTeN007ZlkY6tgYAGz1l0StrJfAAAAApAZ5zakf/AcTJRlRsBY2MlvYCh/mACcaAv4erqw+9TZLQ8XQ4lORlcYEAAABrQZp1SahBbJlMCFf//jhADWztmL57QmafuU03Xq6H6PAA150mdfOmyALorGq5H8xjzNIVARaUIR334yHCSrF7b/8flZHLSF7oVL0ayKy+9vY6kcQBgBAUSGhf089OSZz1rPhyXhvlz2UXK3gAAABpQZqXSeEKUmUwUVLCf/3xACDGoyIlIWMa8n1vlcLvxUBYgBKENh5Ox7MBTHop9PGVxicPCu7s+b88AuWahB8RPSf7FFagpFmsbSYb3p2kVkha+vnrI2+LaZif3u8z5nScOKP/POOxLd+oAAAAHQGetmpH/wHFfpTSsg1Y70x4D/wCpgAA2etAWKx9AAAAJUGauEnhDomUwIT//fEAEk57BdEWZACDc6hk4t5fVXrHIlZfElEAAABwQZrZSeEPJlMCFf/+OEANbZjYQnAgCb/1i+nxMxw6jk7XLpLKEpOuq73LzEPNxayM5wWPL2smPjsdTAV6DXjEepcTLq0nzAhdc8Yubf4/0SU5VOpMRtj3sD1B6Ha4wW7B5A8Uv4gCGxZcpF9RNDZBuQAAADRBmvpJ4Q8mUwIV//44QAeff+bC7aiuO7HTrAB+K5PXFdGaHTX0ze0DBAS1SaMdYfQinOVeAAAAZEGbHknhDyZTAhX//jhAB2WYEG9tkNyYQAkNdYEbdKjtswhzNmo8NO7Ipr7mbnJPUY4d/wqeA5J2YbsyrbjC0qsBromIm4h/1e4denWujquAhWWKwJi59yQhWMhkpD5CtlrodEoAAABVQZ88RRE8I/8BHgo5z5FLPjKuoC+5SX+oAIfA5A3jB39TE/PhaP+i+g9DoJfzCHTMh5yy64UDp3F1GRBhyOtGsWiZqK7Fa9qurs5xVnPl6/1kH8O0AwAAAB8Bn1t0R/8BxIfWFThPhUlaceiuOAEJlWaCRDBJTBqAAAAAHAGfXWpH/wHEyUZUbxnPNYEx8yo8AAbPWXRLMtQAAAAYQZtBSahBaJlMCE///fEAElNeeLtobUAfAAAAHkGff0URLH8Bxe7duqYhKxARuSeYjCABc9XsL02ulAAAABEBn4BqR/8BxX6U0rIMIJGrCQAAADFBm4JJqEFsmUwIT//98QASTmz/27GJAZkALUoGAuiLBRRFK4HjE0tUfq9ymZft8qJhAAAAWUGbo0nhClJlMCE//fEAIMjr+c2OFQndOpAQ3LACYiXp4F9Dydt0BeExkEUhgSPavwGIe5erK7rz0dGDV/Y92TDpaHeD7rdIf2OBTZY6sQtisvKQfx4/47VQAAAAL0GbxEnhDomUwIT//fEAEk5tAdTEgAuL46wa0Ru4CGnhwi9LaspIlxiiMI/Xw/AHAAAAXkGb5UnhDyZTAhP//fEAIMjr+c2OFQneQJ5nQAA/g36FRmDExf4EW8DOZpSZPdMSnc+Kl54NZSiJWtJTPdVSheSRdHtKLlRFpG1J4fFbYx1COAboB6WuVesJPRY6vBcAAAA5QZoGSeEPJlMCFf/+OEAHZ0V544agAs8liz+xZS4I10OCiM69AkB57Fr5gR5DPJ7OulSognQgfbfBAAAAfUGaKUnhDyZTAhP//fEAEs3CdAIAOAVAxzEa0Z6AgkHVhOey6U0sVipd04maBu8JPKMvqm+uuIMKV2U9X/aIqBpU5k56h6W3JhH1zWbBuR9Rsm1Tl1YgOuM6C1HEE60dGY7yNgmM8yGXrHLqVXZ6jPlusqusr9hvgeEr7xwJAAAATEGeR0URPH8BxbiTleQKTlX3TgjPoKCmgBLIuFM/MSVS0D0bKBvIP4MEB5d4vTEZNXKZba/lpcO25wiwENlBnh+TQL/IXOVIdKCDh3AAAAAdAZ5oakf/AcV+lNKyDUaP8u6qAn9dpsACHkFeAY0AAAA3QZpqSahBaJlMCE///fEAEs5sR6qh5pwASpIgZ1PyLAP9HIWBg6p8OGe6z8sbK0p7S5L0lPrEYQAAAFxBmotJ4QpSZTAhX/44QA1tmNhCHFbPPoPCzhABKkxE2O3wWvpTDzeHs6HGxovcWXQ96LPgyGsgnOTbIOh5gs5jxR5NnkXuOPRtFIepDB3Ni/dqJ32B21fSmFG23AAAADVBmqxJ4Q6JlMCFf/44QAeTRU5zJpvkgA/DHtNOVnxPSKy2mSEs7uWW3Mrsmago/cgR6+vhgQAAAGpBms9J4Q8mUwIV//44QAefVWWctxfAA2guBlVnx27FMk1C8aYQhY4iTWDkFskVfdgEKhsBdJfsRxjOWAV9Mqm6Lu3IWegMUet7F6U55F3rB6je9czADWE72DAtDG7QDGzhlczUqYQ73ChAAAAAU0Ge7UURPH8BxbiTleQKTrUGB/kwBYAJU8xyHF16OeNGa/FzkF1R98tsWqBDjoRSY/Cm+jwd/8uSRfAn6UgQTC/1X/kjU2xWZYqs3Vjuthv4iopdAAAAHQGfDmpH/wHFfpTSsgzuKkeI0nTeoAEPlWaCGAl5AAAAakGbEUmoQWiZTBTwn/3xACDGoyIlIWMaIuIg1eXABDudB7neXmt3TG/Be3hgsT/m1OX7OV48wNgxexIraKQTUFUh4QtXiiydSyFMcY6wtIOc/rXdYKcKuQOM2fm645rynIvv3vF0e5Qhs/cAAAAiAZ8wakf/AcV+lNKyDmCJz8JNlQANiFnQUW8OVYGE7+aeQQAAAGBBmzNJ4QpSZTBSwn/98QAgxqMiJSFjGu6uOVTl5AAnEngT08OC9bXQHf89G1ZpbgiZ79bdFps3l6hyxmdobKvc+EynGB1Zl701AECPiPwgNprQJB//Di9rMAf5TAwhfeAAAAAiAZ9Sakf/AcV+lNKyDpMOy1eXPMZUADYmcQWVjd/S1aMfkAAAAC9Bm1RJ4Q6JlMCE//3xABLObQHUxIALiY681kDAIg912IPyHhkv4v1zYngaWX0OgQAAAFpBm3VJ4Q8mUwIT//3xACDI6/nNjhUJ+YuOoYgAaAmZUR3xIXUoIbfKEFyHczJ6/7e6nY1efbROHwJ2brGVjxI++bGRSQ5ceISBSzNlJet3j1AMQoGidw/Xs1AAAAA5QZuWSeEPJlMCE//98QATboms22TyLfoAa5R4iOBuMTYaHNuEMNpITNhGw0I7PuRkp4EpNAGz/KOAAAAAZEGbt0nhDyZTAhP//fEAIMjr+c2OFQn7mrmINPjgBLbNpLOhu4PgKrsb+a7l+WCJol5AYKPZf3eAvKksQTAYmNFksh6enrmglsqakwuCSxGrO3vtZep93ba5hl/owUuBPOivgeEAAAAoQZvYSeEPJlMCE//98QATTmyOvJslUMk2ADjE8DpXQHUB581eFpMLQQAAAG9Bm/lJ4Q8mUwIV//44QA1tmNhCHFbPQhrlpwgA48+jW2C73PENx/ct4gFUk3+d+k/i6xEKUA1C/iowJ+sv61BvPFe/VHGtWuZE9RUSR1JyW7sTDW+soiLLVnaAodCLhlOzv8AmXI/uJKl8u3/8Ks8AAABsQZobSeEPJlMFETwr//44QA1s7Zi+e0JnJimSyACVJOLcsRDQSYh68N1OhLuCLErjGLZOv9QrMEFXW5LiRdUe7x+G0H0rkRXZbrGQCCOt/SLjRaaxQDu+yWwdSntZA98JYHtizeq00c/PurOAAAAAJwGeOmpH/wHFfpTSsg54tNzhVAIIAE298TUwAZuFTqbPodnHa48cZQAAADlBmjxJ4Q8mUwIV//44QAe/RWMmxysjV+AALhZyr5iu2/ub2RMto2HRUTgStLVfnwCXH/BRvwf17kEAAABgQZpASeEPJlMCE//98QATWi0HarwAltdsoJuTI7CRo4SEd82AfMqe6pejJX7PzbYoleXHxRXUJWmDOToQ3iyT5UOF+Pg2cAHjiXjJztmJJFSw3hJsR5lmi5Fdp5HXzW7kAAAATkGefkURPCP/AR4KOc+RS0BCsJ/81kVy4AEQMyNKtwHUquY3cExDYZhtiPqb2ZvdIJsbtBRP9ux1g6fI9i3otT4NvGTnynIAhiIOs9uFgAAAAB0Bnp10R/8BxIfWFThTaMUQfnU31AA2etAWKQ21KQAAABwBnp9qR/8BxMlGVG83CkKsYOTvhwAQ+VhMDv9QAAAAXkGagUmoQWiZTAhP//3xACDGoyIlIWMeQP3R8sXhFwABD45TD0xa1OVbpI3IGXQcuXXh7bDMLecSq0o+Dz6FNQPLuQdMaG3unhQboLsU55lsxHZpbcfXwqqmqReP8l8AAAApQZqiSeEKUmUwIT/98QATTmzvPul8ALwAE36wM380JuB4XVxj5mBYzKEAAABbQZrDSeEOiZTAhP/98QAgyOv5zY4VChUALbV3+IAH4nlyqfuLkmiFL01EPp2NPgAzhnMe4OyUgN+R5pr3Sr4ImQJEIs+cEkXXXanbHKtcm2tkbTUPpTSAKdFnvAAAAC5BmuRJ4Q8mUwIT//3xABNObQHUxIAJxzvoyACN34Uu6iLuD1nYFQY5CPk3/IGBAAAAYEGbBUnhDyZTAhX//jhADW2Y2EIcVs9DB6AsroAG+xfcMvZHPCKUCL9A+dBlry5BUrM1qlil/n2NFfnQBiBkFR2vC8ag5DQZqJHFdNFDKcI+Jh5Hm3YNg0WZ0EI0pFyXgAAAADlBmyZJ4Q8mUwIV//44QAe/RXnjhqACz75Fn9izEk7jR0Whjr0JxmIqLuB4hODMnsrZwtv/J6FPoWkAAAB5QZtJSeEPJlMCE//98QAT10ogvAA3ZH0PtryXqhH+J4M2LVrGAP77Xb04maBvOxBvzNI2dUcQUC1QdrNLnaRHYZRPb1D9udb80tMut1Zj6jZIgN94KdzGseLW9PBGImjc7VCnbDNzPNjgMQmNI6dKJ2bQXyVgRT43EQAAAE9Bn2dFETx/AcW4k5XkCle6TcU7MIAB33ASlp8dZ+viE0kntlYOZEFNB4P5cUgP80hIwXxcptDNzFOqsuuVyQYI1agdja9hcexSCrLNahqAAAAAIwGfiGpH/wHFfpTSshA14LRKrpwL3sADU7GiCTfcN1nZVnj/AAAAO0GbikmoQWiZTAhX//44QAfrRU5zJpvkgBKkxE3T/qXIgNx+uyDCyf6wKuBOscthOU2EtqKaT1ktxEPBAAAAWEGbq0nhClJlMCFf/jhADW2Y2EIcVs9GFurOEAEqTETcW6yi1QxC1t+Jl71CrQI9/0SK5DwqaoC/+lrlriDfTD0iA0/Y5D5qIYXj/+hoc3vsOZdFWnWN9NcAAAA0QZvMSeEOiZTAhX/+OEAH60U1lJW6QUALWa5M2+B6gaBpoPPvV3c7WKV7dE9jUuZ46d/gkQAAAGxBm+9J4Q8mUwIV//44QAf3VWWctxfAA2guBlVnx27FMk1C8aYQhY4iTWDkFskVfdgEKhsBdJfsRxjOWAV9Mqm6Lu3IWegMUet7F6U55F3qX6je9xQx89mxattk+LFWhyenIZoUnc3zCHe4SIAAAABTQZ4NRRE8fwHFuJOV5ApXr9YnRQaFgAlTzHIcXXo540Zr8XOQXVH3y2xaoEOOi14GAHaozmH8PDdLzsaCd6ckc2Pl24sbIb21Dfs8UZrZ3LbJlNUAAAAdAZ4uakf/AcV+lNKyD31lQp5qGwTABCZVmgiA2OEAAABPQZozSahBaJlMCFf//jhAB+nlPARVY0zskAF7dFWr79VHCqEVGRt39VMeiogHg38Y9fiqG7g76/BvUDmt6tYvWd5gvuv+U21Lt7+WZv9CEQAAACJBnlFFESwj/wEeKbPByfDV/3PMy9YMgANnuY26gZhFIM9dAAAAHgGecHRH/wHFr4pDCrDBT2olpcAAQQZmmTAmxhswngAAAEYBnnJqR/8BxX6U0rIPyFyobHAAXrP8eLaPsz5xF+FAmOQv+nR8dAFri/rLMb+4BPIbvLXOKQFhiO9haljW+yF0CQsDnUOAAAAALUGadEmoQWyZTAhf//6MsAIRI/iQx0cdZsyZmkHQAmThdyuWONwok+tW4NMnwQAAAGlBmphJ4QpSZTAhX/44QAfzOgZ1ErogAymnQEmL8MlA0+XhBfRqhXVXyoT1F6uASYgeJyP8ETptBXg8LWOR21JWoL/uuwMVqyW2P4YbcA0ZERyipLtW1vOos83jOjZnU9We0ojcalX0Q8AAAABTQZ62RTRMI/8BHgo5z5FLQV+bJVRpVMeuABEDQUSK8pgcaLmXE7/Nrd5hAgKTWTTeu7QdjoRhi7tP+qbHvl8n+ggJ9cqPcFXFfdWtxLGwyb1xx/gAAAAfAZ7VdEf/AcSH1hU4WEd0xbwUgADTI/dZknpj/Oi+gQAAACEBntdqR/8BxMlGVG9VLChivhqzTABCSCu9Ge+WOyQLnoEAAABYQZrcSahBaJlMCE///fEAE/5PtZLydIASNlQsOmT0IJeirxrTsg3SL6tcx3qEYW1bhJlp36ARrb+lkjzoJJZZXtCSPESnwrmkuzyiQr2zm6ChmXxr/18biQAAAFVBnvpFESwj/wEeKbPByfDV9Kv9OAFnlXmmyzb/CnXdXDWgjHT7fmOGvFWYiQvQwUJvEONf9FFwVY1wHDU0Jaj14zjYpbrTMojjVXcZRdDozq0xnsDgAAAAJgGfGXRH/wHEh9YVOFhHlxuZuoAH1JFo6oFv+i76bTI5TrBgDZHAAAAAIgGfG2pH/wHEyUZUb1UsKHHjd4CABNRm7JgmvzdBNjEUgcEAAABuQZsdSahBbJlMCE///fEAIMajIiUhYyDqbq7s74wAWrN+spwIsFwj0GyuUD3p9jYUNIIkA4GnmN1PekAicpQ9IcxE9j0ge4WHf7xsSTTFSCIzKV3syzpUHBmT8562UjO9tdleU25c2cE5Wcmhi1AAAAAjQZs+SeEKUmUwIV/+OEAH93/mwu/InOcqj6AC9CYusFmKqRUAAABfQZtfSeEOiZTAhX/+OEANbZjYQhxWz0Kd1qycxAB8zp/9CK79RWBYYXJr9t4PXo4kj6R5vMOSgWutnZxzVNjPZGKxId+tVEtwCBLtXBgpcCdM7O71/4vVFHgDDgdQr50AAAAlQZtgSeEPJlMCF//+jLACABfAkaE0gAy18UZk8SsGgbDkLMLtgAAAAGdBm4RJ4Q8mUwIV//44QAe9rCYh80DMyABtBYqcZAsejBOrNBeBtg2YosUnYePAU47XyIQl9joC1DBLGyX1pG2inLzVXBD7Ai2q7RpqOWlT4+R9FplwlIv2lrS1U20GInMW6N6N5XLBAAAAVkGfokURPCP/AR4KOc+RS0CldQl/x1yACGjeg4e4075ECp2unbwLw7+9/A92wi75g5YfBy9TRnlpdVbRxkHaUTBlGpWq9kND3W/TK2+ig2C6yujdV2ahAAAAHQGfwXRH/wHEh9YVOFNn7YtJUgAh8qzQSNUX8yCAAAAAHAGfw2pH/wHEyUZUbzcBAqxMJPWXfEAIN2C3EQ0AAAB2QZvHSahBaJlMCFf//jhAB8iaYSeALABDMaC6p44b7WlLKia/kUZzv8172pXwUy22t9L52Z3BulzhyUPpJjhEzHo0RGAk18gl8EDvIFrQ2EULy7KRb1/n/RBbCMrIxLgBEF7BLvgwGij9cTo4kHg/29hyVS1g/wAAAEZBn+VFESx/AcXu3bqmIUQ1btMI+hJAA/IEoHxt3S+C+AK1TNGYCohYqrFHE3SsJCmOdXv0RI5bQEy0DrZ8JfmIcwVz2/ApAAAAHwGeBmpH/wHFfpTSsg548OOjPGhVQAIfONFKMFkAe4EAAABmQZoJSahBbJlMFEwn//3xACDGoyIlIWMfgDEQQAHBTJwQa0TTXVP1g+RKp3P+COo7tnTReQ4okxX27KF4eg+EYg60X7ptcmdJmazLE7U/CDBNCPU++6ummOc2QKcWcQqTXFxwHVnAAAAAIwGeKGpH/wHFfpTSsg548uMIiVAAhsna2hJz+Hmxv5yoPHasAAAAN0GaKknhClJlMCE//fEAE056jrspCm4Aq2d+sqfwi6jG9ScDoMy/8q80sMMTxLOO/KuRSlTuH1EAAABsQZpLSeEOiZTAhX/+OEANbZjYQhxWz0HohWZK0oAHvOHruovBemn9mX4ly3U2NthKqj6qiY0aJi+nLwg+v0E8h/ODNVcR9QihKFKvHMyakh4lgYJidjqO5qR45jiBYinzh/oP6MFUtnQJj6s4AAAAZkGabUnhDyZTBRE8J//98QAgxqMiJSFjIO/72WPIxQUwAWREJbgV4rIdydsr5QremszBjPhW+Kr+k+Gn4aULE9mtjS2XnXOkdUP++wW3nTxsa9AfRKSEK9AyDFRSRoTHatILpeNfiQAAAB0BnoxqR/8BxX6U0rIOkPbqYBumE80AAbQSIIm0oAAAADFBmo5J4Q8mUwIV//44QAeTSlnjhqACETIaO+E7HcSx+QshwrGshjpbOXSKeEoynQ6BAAAAZUGar0nhDyZTAhX//jhADW2Y2EIcVs8/R503iCgAaqGXc/kCiH9MRF/lTbn4tUNfQu+CrDfQY47Wr5NAJrGpNwb1Hep4HJUCgI/IIS3vZvNx2ZEZDlQqi1NExEVI/w9Xia3DgWahAAAAMUGa0EnhDyZTAhf//oywAfLuN9hHq9DdYAFP8KORW7y6KYJpvz+i674oZnMCzffvuh0AAABiQZr0SeEPJlMCF//+jLAB8o1tqoYZH/CzGgAXXUIGbD+bDEIo5xsevg+MLX7VTuWZBsTrAUdb7Mkc+kx/Utf1isxv65CWYqVEqvbqQ9vJQm3BtSqhJz9Uh2FCYbCRAxP4RIEAAABJQZ8SRRE8I/8BHgo5z5FLP0RtB8zj5YAYAQfBeterK4PfT792KWBJ4H1TM5yly7Su2rxtST6Y9rtqQ7CifihEgZFwsw9lXq6pgAAAACUBnzF0R/8BxIfWFThOhto0faB5OACFv5ZZ53oebKBuVzN7z6wwAAAAGwGfM2pH/wHEyUZUbx0CGPPmD2EACHyrNBJn+QAAAGpBmzhJqEFomUwIV//+OEAHn1Vwiy/wAKk86OxUhXwkdk68Yi7RTCavqjOfe7k87YNMWckDsJjhrdTXVucRQ/VtxGvHHd2WAIHh1wKu+RrQBUTHBuphMVL5ZqhqPe9hzk6v7sixML9HtcoQAAAAVUGfVkURLCP/AR4ps8HJ8MOZQWgpGjrlG4AEOJChMQ7dL9AnMnHOtUyVvgq8yyvAbCfmGxeZs1RVII0/0a2NxQXO6j5AxNCWqIbi5t5BgIggwP646bQAAAAfAZ91dEf/AcSH1hU4U8MMTT/8fAAGmR+6zFkUv1HvwQAAACEBn3dqR/8BxMlGVG8zzzFSnbU1x/gAh5BXejHgPHZIFgsAAABZQZt5SahBbJlMCP/8hADMweALlX+T9ydAZdcAJlcyqvACGSecQkQM/MTvo1EvcY17Y/xrDeBEk6e6kDNc8EHdXcu1tS7/dImrNe7lH0MYtj7A7Z6htFD224EAAAokZYiEADf//vbw/gU2VgRQlxFk/BeflUDBeb7mRZO6XWfWKJSM0rFHVxkm6+s4Xvo2QRxwl8R+DhKtZYI47mNMSBZFHJC2bzuc3lBbxCwwNJ6ZzTkGH/OLkYfrU/FJ/o6nMZjH8IlNZviFR0oWO1yb13+/IXIlXRA0TUT1j8RfVfFV0YPLRXkr+4DvTezt7ICrPbMGEGZbHL9T5rxBDnhFDr3qkfz2g5P3jGmVwMCeo07l/1eGvZyOj593Kwxz1NWEkH6O3xBdXZjw74VkcntwUGKPGAq0KRAKInHkGhJqpyVQrgIj+Oo7W3MOezXE1VSYZX0cuT2lxFnp4P07Ryi1yesbAQFG/C5pDCgzIqTLpRiuFEsp/aZIG8kxAB6pYexOz1zll5jTnlRx4LxbrqZSlGtel3h5XqSVrx1D0W5aKZnPgFwfTF6ZJIy5LC52BQAQoqz+Jo0R+eaBnbRdqXAaM9jtU/90nWwn5SG8oLO9eM2y0PAQV82CHuG82Eacxf+9/fXvoAD7rzAOruvHnpyXQLT4ihsu46ov/su0Hwahq+BV3IaRqnQeuSROaEd8jnPnfX9zEucNMzLgtNzhC3+l4y/y3UeUZPkr8pmMmjiAs2ApIq9fnv3bhDumQG/mscuZXZHCFIplJc+J4xOS18zzh0YBjWNx5zbEMkSmnY8A0dDeRK2aPXwb1+Y+DZaJ+QLy3d0+E/ClxKTRnOCZe3NaReZoXwFJpRf3hUZKz42U7YY+Cg9EXm3Xgv+DyzOFICmGY0NnuH3Kp4mdjqdqA1iKJfw5tnIU/9lGV72Ry2L62zxi7l4FBtz8FMo051dDSUhtWIf6TjIt1EPzkN/E191nFlhs1KNv/NE7jsXk1W+IEdMHYC6P0XPtMjl/Mc+W2jv/fF8sWqU4vStEh8zoIGJz9BuaEWlbu+g64gTUugqgtgMUmbYg+7zggaIKuOVo81V+ka/jgyTd4x7jrVVzYw7IULs2RzGoTSeF2gS/rkM6qvtdbxy6hS9v42bOnLnm6lqFbGFYDmOw604VYXzNgva0UZbd6LFLBUM/U5D1l2+oIWv3uozc7YV/HVlF3Yta9xYrdJU0DtwyAQNbTYTDtPrUAleLCr7aUdD0+obYAyLQyUrvuij3SSCB672TwilT7QjtQq6xnBNjSA+y1IFe6IKgqj/OxwIPBOk6la8vKeR2r3BDbCkm77rpISxor8MuZdT6guOST9VhbESHu1xKPjQgLmstcYKo7Omls8EjxuUMDEA/FaFGQIOi8jVGyB4EPhqNaUSohpgR28U+BEuTNc2DGIbELqkw7MTwTUGIKEZ4yDUM7A0BfeE46h7iQhOSU1JM5gVRU/Hl3d8D4mTJpWzlJ29c8wHnNATMUuRec1C8oHR4SggO9q+cjhRzY8B6M3I1qLJMubdPTIt19gWON5kiWxwP3SF+H1HcW3R6CeCK6koVciPrxBiJS774LsZIFjGwHfKZjsGIv7xVyUADrMiqS7bfo05mo+aahA7wtdYZ9arOSih8xFBOF93pvLw5mkQaNHcEkDlnMP3AC+byRsLK7S2BnsYdnqFKeh0WQ009W+r/8C1i1Zr2OZp27TvG0ufM7f9EQMfpYDnS9EbY0sghS/nH+tSahyCeU61M0yrMvd4j0BwzwpMaY4kxpA7oelHjgr7ZO8zpjqvVum4UppevzptPhessPuLvTzRAjZ2HkA3rBc+PTo0EruSd7iNVfndEC4XvgWHe5vW0aa0rCO7MwajSyIaJ3xwwy13NxUIKF0itIgPbwDQJlsl3A5O5Q1q+kOOMcOYI1WoKVqe/M86amyZODzjf9oE9pJND9C6xo4LFNmAt7QMK7nHLfGOncA4ej0wJVw9HW2BeGMyR+XVvLmu250s+HDjzwkT4BUCBjd1xnolX0QZFizn8dRvymWXgnq55/1zuBrwYfQDaujsN7Xath003Xm1HH1A+qOkg+HIpZPIBBHhVmsbiCT2w/3dgcm3g6HhPbSOuxbi/hlusPOLPHv58TbJ01+ef40typM20Y3pgpn+x2x5k/YqDg6CIpbdV7Paiv+KIblEQuSWKQJSRLUF+A6bPwmUTYRw3o1lrthRxd3A+c1ZauERE9ffR2nt8g2uAeQLu4WyDRicLjVcrN3XsvnpvFNpDtkjGKYZUhqdewjPo6M193FrzmFhTDBG5jFm4NJNcJ2VnX0j8cvL3cd46VWyNvn1fjphE4bZxi00Tr3lpgdd2U+buEnc2EPzhX2IbJyg5jocSpJL/3KlDAGgeX/chZl8BIJ12APlLcs4TKUeBJu2MPCFsnyVmZkOpGTRNeEOPsI5Qt8iPwVN9VIw9hF46J/q77MeqVHMQ8q04KpZoQDahbHviemawQRxYHOOxZiWpL8H7J6bgHZs7yaRF0MsNVEcwfPDcIX9uWZWgfEP5dk9WzXRtt08azflZkCS77VWh3Y9Q7f/PD84il4B6WlkyOCyzhxluTQ2WaOSGzbw6bDc99mVi10pSkbDB7AjQf0CqtXDQJEAbMQTiQ6cOIYHcL0gGEMvTMPOcbYOGaA1EYX/+MasBgKzQCqI+E+Ax+1im7ZWlVeYFhvuIoYXjZ7nNC2gSwV7k7xct8KhGKyH9v3iUor5aNXMTraL2xT+Rwlr6Jpn/g0Ii489ZqEF9V/YC4I4zyICGbb85btgtfbJP3B8/5jtcRJuyRoIMNxafp2q89qMdWL0TevHG9vzgKKkIQ6U5D0Qz3rFEj40f34TqjYeuwjyVO18llxgAL3W6+eWgjiJaUvbggndeRnlxlQ1OG1s8uhWJ65dnAMz+7MDemuwV9g3+ALmMm+v59jRmEgWhsAemdNqPBCDK7NP4XGKdXkfqQAkBt83KVnIqgykhS5QHPxNR5ABmyS6g4uDPqXXi/4J7lfaDd0Dw9l2Jx4UkalNghLNMNJcIX1YibV3RJ3Z9J9uDOK0i/V4S3GGoIgnhQqDCLDiMOpn4HX7V2JJKtoahrf4yEudpbcqmwq4BN/5o+zm/ahUFHOU0CPKlMnwAYuR2AIsIZcaEBsgBYTVSQEIVIxbg1A8BF1WwDwaN4UXp/7auglAsYY7TkvgzYK8HBOnUVVIqqvOHhYLBvz9lsLzD8QmwcqT8kPdczSr19JOLHOkU9AiRGctOihVzqxkzFesQJf//mybogB7d6FIf2e0bmlZqZVBu2A2nDtI7A50US40T2AMUvU65SvL/h0pkxXKD5vqmk7Xacka8itROEzzC56HokDOx54IaFY0Zf0TclMKm9y2hyG1OCSwyORAJ0sY6SJEFvsj+yoqcdcQ6+DYqZXbzy1igRIrlmjqtrS8WQYcCgksNZAu9A7u9EYTlqVa8hgqjheCKwTluuBeo7Z79K1jHaHiibvWANLzLm7d8CkYxVQ0qL5Tza4I3wUzMbiKDbwKBhN/NNRinx0hIKXEWC149EBxIb2fdkwzR22dFxyP3+yg49oJd8AAAAJNBmiNsQn/928EYAWklE0PJl47ywZ7Y8EP33vnmDs41yendvA/R3Uiuz20jZofo9eMZph2WRjEfqDs+SVARz/EoZX2Ya2t8O12MP9NqTb+9xe+TxPEMjH2RH55PxUaY6zne2AMtpcJVKTQvN4eq0d11m0puMAbmbyT2+y/g+ENllBibaGLmVdTnLxd5OwR2m3N+6fAAAABjQZ5BeI//A7GStS8l4TDSNF17ABsXlHTBPTDv1MLDcvrFSGYZLfQz+8gTddzfKy3+KP5bBLjskTUxwaIqw9JO+Qq9Hxa78d9C097x4rxmuT/iOXJ+rxf+NghI+DX136GzSqZBAAAAIAGeYmpH/wHFfpTSsAtaymxOT3vXqnS3JACDSootxDg3AAAANEGaZEmoQWiZTAhX//44QBsvqHAAnPpmHtwsuBSJTcw/F65ydlwvbrD8Tr12K9ye+Xka8nAAAABrQZqFSeEKUmUwIV/+OEAbLv3sGhincxfVKmO1GYp68a3wAln34TLpCw8c+w7Z3NBF0mOfBW8hkmqlb9dvaonWu4EP41eKBWljrkY7r4O9zoCLwgIkdCQWEGK4JyvAAO4BCqtVObcgu/g3srEAAAAkQZqmSeEOiZTAhX/+OEAHZ0pbKhAIAF8vE2109ODEC2gEoNJgAAAAakGayknhDyZTAhX//jhAB3NVZZvynF8AD91FUkyBY8Vg0Vqb1wACux43eOcG9yEiK/woVXpHx2vmeJx0syOyfB+a8OwLAousOeHDEmhYgH/z4suPzn+DSNR8Ga0jbE+ox2/06HiEzP3B8yMAAABUQZ7oRRE8I/8BHgo5z5FLP9XBeMln6r8AEKEoxlyi/+RWVIPPFtjrXiffCYRGg7if/qSb5QFuGEYGA7rPBYzuJuV0R8S4WXbxjG8nt3BTgbOnDWGhAAAAHwGfB3RH/wHEh9YVOEpOkxsFn8FgANoIDyBnNR9DPYAAAAAcAZ8Jakf/AcTJRlRvBQIY7V2QETSABDOvoPHO1QAAABVBmw1JqEFomUwIT//98QASU1+q10oAAAASQZ8rRREsfwHF7t26piEqF3U7AAAAHAGfTGpH/wHFfpTSsgwWlPP+psu+AAQzr6DxdiEAAAAoQZtOSahBbJlMCFf//jhAB2/fOqHb/XxABD6kJn7rES5CjRFQ7yisTAAAAGBBm29J4QpSZTAhX/44QA1sIQbo/ezhEna9/ZzQAQ3TM7caRRuDbbDKgKSG0pI5AbY3dicN3zoPgPuT1k50TA7LscNgZsjIq4Xn1ZeJCYzqremCAjxRahiViI/D0pl37oAAAABhQZuRSeEOiZTBTRMK//44QA1s7Zi+e0JmDF0ViHxdAA4aSeYo7IsHcFu60keY8eSbTkC1OIrd/DQbgAOhUiOOVD4/jCSJgc+QN7v5lQi59Xrnmf62VIXLYSNCgk0XMFXwXQAAACsBn7BqR/8BxX6U0rINUDjsfEzPkgAB8SrskaQ6QTRTeDIOUaj95Zmay78wAAAAYEGbs0nhDyZTBTwr//44QA1s7Zi+e0Jmxomx7sl2cABKcRnIaRBKvtuG+M39hw7z9AMY5iXqAtnx0HprTRNSVTRlmF2nL659x7qKXntOT0Vamq6LsE+EZ1j9xm4S2/u1kwAAABkBn9JqR/8BxX6U0rIMFpT1MRhIACH5I8aBAAAAcEGb1UnhDyZTBTwr//44QA1s7Zi+e0JmvD8b8igA4FUcScecKEGZScdkQXlNpO93axwNuClGrfGzPD2Yr/bGR6x6I0WXneoPMA1Z+hpoZCmJF33p4DyNJyYH8E27RVC7+x+7JWjwAdyPVySF+85ttuEAAAAjAZ/0akf/AcV+lNKyDRlcQoTgamACXjOA1x+gxGKshwoNJvEAAABlQZv3SeEPJlMFPCf//fEAIMajIiUhYxmsT+RzQA3Xlv1kidTNLyDAX4RX81eI5lQ8aI10MK2tJKJX61UoP8XKlHwG8CNNK1dXgRAL3wXD+VPW2AjZVe3n2m39I8QXD/1CXCz83sEAAAAqAZ4Wakf/AcV+lNKyDRlcQoTgamACZXRasSXJlcIH9LWORq/vvtu3+1eBAAAAd0GaGUnhDyZTBTwn//3xACDGoyIlIWMalIpClgggAfqdn4SQzfEwCMFJlcC5WFW+S8TzybFNeAX57PyPxL02jXd6ExRZzd6oORyyubko1hmQaTjZCRFgdEhoC0QdKp2/PIENd1kAScB9xUWZuKH+rSMA7o7FmQ5wAAAAIwGeOGpH/wHFfpTSsg1Gj/Lf8gXy5gz2AB4i9lYUfNu4ZNq8AAAAK0GaOknhDyZTAhP//fEAEtpHM19ez20BR7gALhbU6YpdMKF4HCJa2X5vv+EAAABRQZpbSeEPJlMCE//98QAgyOv5zY4VCfpaysJurAATn1Gn5qMxQWj/yIv31R5v4VqwiHBdpUhtWcGcACkCAf4Y8D7QxrwAIe6yI/jVneEN4bs1AAAAIUGafEnhDyZTAhP//fEAEs5s/9l/SYmwAml3hNEtK1wpqgAAAGNBmp1J4Q8mUwIT//3xACDI6/nNjhUJ+5q44bW74wATjnfrJ2RldJqeMv+uTkdi3EYNmUFctJdf96O9VrFMXEuLs++j3Q4BT67YdKuqLKvs++MUevVzvuTkiX85tCLfyihCydkAAAAzQZq+SeEPJlMCE//98QASzmzvPuir39ACZadhg2Mr1mtOPVUsONA7WuYOUU54resEkeDfAAAAUEGa30nhDyZTAhX//jhADW2Y2EIcVs8+IZo5wxZaABeuqQ77y+YjawQdIysB8JdGyz6aecrU2O1inJt25UcsZ9/SZy3Xuej7xhLi2o+mp5OxAAAANEGa4EnhDyZTAhX//jhAFx+ks1Jo2VPy2v9ZUMnAAnHVHTp82rsH1QzBqA5IRf1QujW/ykgAAABZQZsDSeEPJlMCE//98QAS7ogI0MAHeqESGaziFmtbFrX0h9HPr50ujmYQtrXvGsNHhtLXWQ08G0kQ8c4dDWIQmL4+GyPOTiHqh/PycjE7IkNRnfWKSqD5dtUAAABRQZ8hRRE8fwHFuJOV5ApS/q+xziuIQAlqnW6aGWXzkAFGLDT1a97lqpLgR3sEH9hRUkwDDPQ61U2d6CHlyhJ8FT2l74W00VBzXaJDZlZIuDU3AAAAHAGfQmpH/wHFfpTSsg5giejXjZlYAANnrLola3AAAAA2QZtESahBaJlMCFf//jhAB79FTnMbsJPzZIASpMRMTzzcZmoi03FgVqRlNN7sOgVdxlB549yAAAAAeEGbZUnhClJlMCFf/jhADW2Y2EIcVs9CWE5yyAEYQH+OwMZCRc+U7u2PpNyl/dETkmH8gKGqgEaqKH9tJZJcK9EJVuPyOh/BDUKKVIBdCZxv1YaaiAyqlqBVDVu22PPNQlo+puxEc8w7MtHNRtHhVdZEhdLlgr6G2QAAASlBm4lJ4Q6JlMCE//3xADcDXcAUHCBKxuzh1j7Zp31lkADhggKkYw+Ai/Dq/+6C6EQbt4nzdDennoLinBZPLVqtbzWsEfLcHkisNtCDkWqbjoYgwkQIqUu77fh7owNSWNAfKJlV+wdR33KLI+HHi0vS+iCbRdaa9QjRk9ceQs3ISOiwGP3S+O61NWx4mQo9aUxeregWC2aNTCUTKXrsY2ISCiuRjpqy1mXrywZ4fu+DCrW4m8PlqAb/DWfx7iO3qA5wH9wCZZRfbQBc4HCER+IUaGvDh7xWSTyLnob+tsA5JfydUBgwLEum1vxWQHo9sDvjXykEqMmjFzHK9InVzEYJTFSp6kP3Rn7Aq51GPjYLnyQ1CT17jaKM53rVPizGAju2y46ZRGDuzZUAAABMQZ+nRRE8I/8B0IfJY8aSVNTsLvvJhKPivwAThDREes0009aNim9EES9SOsZ4ypqTusolcuXUeRPt6YtHfkLp2wkCoNfZl4YxENsRrQAAAB4Bn8Z0R/8Bxa+KQwqnETCUaRtC/82mwAJ1Ks0EeikAAAA7AZ/Iakf/Aua9zACCdZC/8wQP/2mKywi/IZ6LxHlI80MO9dUCklm+ajYklxdBP7/klZnzl4lga1H7qkQAAAA9QZvKSahBaJlMCE///fEAE1pHJM28murGOACWSaeZihyZLOsLAcF9d/8kMpsM9GwIGx8Iek852HkiIwFe8wAAAGFBm+tJ4QpSZTAhP/3xACDI6/nNjhUKFYdvkMIAJY/nefWnpz94XfoHly7rplMRapIB2cygUniXFZc33Zz/X3Jpl8k74HLQ77zUpCNGsfcAbw3rVWU6mBzfcnrRkBX0UvajAAAAIUGaDEnhDomUwIT//fEAE05s/9l/SYmwAmmdYfo39ptAwQAAAGJBmi1J4Q8mUwIT//3xACDI6/nNjhUKFQAtvUMogAfPlM7nN09Yl9Gnlsx6r6FSvC1EhU5b050KhTH1QrXCa7FrACT9h7KNkyd/bGSc6JoV32tBoPv5ijorSTxNYfHZnfWysQAAAClBmk5J4Q8mUwIV//44QAe/RXlaVEKaBAAvXVHYzWyIGvu5uaKRiTrwMAAAAGBBmm9J4Q8mUwIV//44QA1tmNhCHFbPQoXjwUgAhumZ240ijcG2mgox/wsN5GCWLoPvxhl+ryEHDO/ZJ+TMSCiuVppUiUxk8POFMQwUy1ir4TrKPOXmjeFW1nQcwOcfA+AAAABmQZqRSeEPJlMFETwr//44QA1s7Zi+e0Jn9k+6jjyUKuKADhxPPaoIcF05Q/WJzvMS6Hv5AnYYVxjooIG7z1KZ9urAE07vzffzi40xCY3CicG+urhsuBaZF3qt/VU6d6uG1Lz2Tp7hAAAAKwGesGpH/wHFfpTSsg//ex1FBPpaABm5ZpJB47yuP8guUATN5ZeV/EyF3bgAAABeQZqzSeEPJlMFPCv//jhADWztmL57Qmf2T7sC+O8ACUwDRlm1fLYi278yr7bBVu0YSpKgvwE9B4UpPZ62JGM5v14H3WTptszpOfpRRDexVbVfOx7KkJgQcYVSAgzuXwAAABwBntJqR/8BxX6U0rIQDA7LUuRKXsADZ6y6JZi6AAAAbUGa1UnhDyZTBTwr//44QA1s7Zi+e0JnxVw/IoAOBVHY7s3PvuidlOOzl7qNucw60O7K8p7EUC3Edl1xC+2cqmiAbG9qTFYvI5kA+QzQOiv9+gaEa0Oal9tbpj+kxZireR1UUEWHdv8GimnvNkEAAAAnAZ70akf/AcV+lNKyD/G03QQJUACajOA1yUk5V+0wXnI9SqHBihqBAAAAY0Ga90nhDyZTBTwn//3xACDGoyIlIWMl4qJsc0AN15b9ZInUzS8gwF+EV/NgKlWwTK8/HyXP7wr9L0VyU2c6pFx/nWigcrCpXm8QC0hBjYXmd6G9U7t9lhujoL+tz2RLa3NNcQAAACcBnxZqR/8BxX6U0rIP8bTdBAlQAJxdFqxJcmVwgabnrtFEXfvP7I8AAABsQZsZSeEPJlMFPCf//fEAIMajIiUhYycZ2DdMjJoAQo2uk8ho9+c0doNPITAXDcCEqjwjtmPkEh1WmHrZ5u5R6elRWjgrO0GYFRkYm3LBq3ZpII88lwhhzIuYy/zYZk7Yp2EB4T0Z8isexzORAAAAJQGfOGpH/wHFfpTSsg/xtNzbcgbYCABDyCu8iEP0740jVFQpv3QAAAAzQZs6SeEPJlMCE//98QAT2BYSI2aqiqADXKPCWf1L8/Pj5vFxhnG/8D16MNerxVOOpa9JAAAAU0GbW0nhDyZTAhP//fEAIMjr+c2OFQow87HmgBNM6Ymfuj3gAOSjt+EUaAG6Xo/yra5HZqtSlvenZ0t3VeXcjDjXmC2Gy2MjojUCI11LLsNKydd4AAAAL0GbfEnhDyZTAhP//fEAE9gWL+QOADbs1Tqe6QEQfTedRQypOs+v1Oz4pawvz0IQAAAAXkGbnUnhDyZTAhP//fEAIMjr+c2OFQo05PFNLsQANi+NQ+WeXq3GCyzjS4OqvlEdrxRsP6uHxXZmvFzm1nVKVhvDh0TcHiJuYJAzTZik9wWiz4DoAzSKKQUSx5MbY3UAAABUQZu+SeEPJlMCE//98QAT0dOX8HgAIVJuOEuEZsC8y7/fcmc11VuQXHHDiiJVHjI9v3AHxv6JqaJ5z9H8N0haMv/lswfl4Xyd073F2edZdRhCeUmBAAAAMUGb30nhDyZTAhP//fEAIMjr+c2OFQo3z0O57ckgcYO/AAb/PMZKQyC/yfxo9h68aqEAAAAoQZvgSeEPJlMCFf/+OEAH7s7mGbQmLGyaIAOLPlHiWMbCnKCBpFuO9gAAAGtBmgFJ4Q8mUwIV//44QA1tmNhCHFbPRvFhoKO3ACFPOkVpYoacJbZDh7v/zAY1EHq3/hx8K2r3up1ogmImzzNPuPKYslBNgLA7kl8sr0QdR6j3tCy1+Skq0tSmW+d3L26XVMyfgx88RnXORAAAADlBmiJJ4Q8mUwIX//6MsAIQF7vObLqH1EoAC4alerO2B582vr+FLNZqtFh2r1GXu8p4iea6hqRfsiMAAABpQZpGSeEPJlMCFf/+OEAH7czyXQRACXRYEeKdXHwE8N06smcNeVHbUcqfXzaJ1xdHMPnB0ni9y5KCPvIMeBE4vp7ZpRaZmwcUsMOHYFqMmBuIWnwLtgSXIQMTkMdlWyHFhaf8exmx2iHgAAAAXEGeZEURPCP/AR4KOc+RS0FKhDDUlEpAXOAD7vqbodE7WS5dtT/4UY/+b8rhu+DayhnPO5Nh/W2OtgJewf/7Z8ykHEnPQ+NJP9l/aqC62c5Y/WchRXp/SW7anuyOAAAAEwGeg3RH/wHEh9YVOFhHlxxuBUEAAAAiAZ6Fakf/AcTJRlRvVSwoYZPOCs+mACaEFd6XtXnAxZduegAAAGRBmopJqEFomUwIT//98QAT/k+1GLhTHItAAhGF3CLE+sB1h/NjlAMs2ZkQ49ns95zza8TPdJ1oCQOi3rTTYj++IXlbbyeNcbMU9v+kPN6Wv21Wggouf+8u9bYYsWHMsMZJv6wfAAAAREGeqEURLCP/AR4ps8HJ8NUiA3SAQgAQFG+TBrS5MOIjOrgdxJgTS4m6ucqp+gf9Sds/Sl3Wo9MLvFeRoQcKI8+3iQ1BAAAAHwGex3RH/wHEh9YVOFcW2tp18jcov5s2ABD5VmgjvqAAAAAaAZ7Jakf/AcTJRlRvNwKYz5dbAA2esuiVtUEAAABmQZrLSahBbJlMCE///fEAIMajIiUhYyDqbmNHzGAC1Zv1kidTNLyC8ogfUTQ0Een7+A1rGE/tf7z9y2ifS3eYJJZTmxBmAmO1BK4JU05kjNqYsirrySFybwEU+yXJAkh1I/uZO/eAAAAALkGa7EnhClJlMCFf/jhAB79KU4Bucr1PAA6y/lumStnvLZGxPkJF/bQTAxZo7NsAAABtQZsNSeEOiZTAhX/+OEANbZjYQhxWz0Mzdxpbz2lAAnHVD0L2mHTbffszPWgUtqUoHvhsNlBE5XkBQrdQY5WLL17ocDCsL54MMYhsH3KHKD6kMtOcd6cZjyhWePwZC91zkkCDp+ARtLev+TNlYQAAACNBmy5J4Q8mUwIX//6MsAIAF78E8Zt2IuAAl3uT40f9xKklTgAAAIRBm1JJ4Q8mUwIV//44QAfHg0Zvr4ACIMXp9oR8WVUW22Usck5pIaGXffKLBT7QEDYciA5HqX7F9WayPQxrmEiNH7Xsg9KqIgb0YaCc8S1OAb9snha8uVkv3A+KY/qkCb4vZ8XtWoVFAAMcSymi4hP2WUFwB2+YeqB/ahNo+hOcA+z0RkAAAABJQZ9wRRE8I/8BHgo5z5FLQKV039BfsABLWEI3ZGmEH2PxRqm2Aj2Rssg5jXLWNkAYJIKefx1FSTzEbDrszp3/EmHilD0wMmD5rwAAABsBn490R/8BxIfWFThTZ+fuhpsuKgAh8qzQRtUAAAAkAZ+Rakf/AcTJRlRvNwH5CT+PsomACEyrNBIkruxcPT7F6emVAAAAY0GblkmoQWiZTAhX//44QAfAyx45YAIbrPPZ+b6siv+dgN4K2QarcSzhyyqk236kwsvr8U6U+VS5gCXjgn2FrMt9yI7WWx+A7gO3+NgkFXEsLc1vVVJRkqcADaMjLtCOj9+5MgAAAE1Bn7RFESwj/wEeKbPByfDMkhxkT91dQAmUJo8Bki7lllSxfyipHxjwiSyqe0HB+ovtdeNiEqwZmMnInCh7gzHElMQ/+PX0C310LrdyrwAAAB8Bn9N0R/8BxIfWFThTZ9R7Pee0AAe+vNk3zHzzqvlXAAAAIgGf1WpH/wHEyUZUbzcB+R3t1AA2AdaN+jq28k42nCkkqjEAAABmQZvZSahBbJlMCE///fEAE26JsEs1dijXrbACWinm6DaxjIXU/LaLwHz6Me+ZLq7pImXHqVS3zpPmrYXfIBoWvubghsbkAnn4kQhBrShOqKTRWt6AWZ9jddO0xm6VI0g3A9QXb6wzAAAATkGf90UVLH8Bxe7duqYhUBWKzAnKeWTwgA71KYn7ZfggWrKyJz7PNDvA8Iv2Ve2u3KvQ7SOxtebKDEYCXGDPB/8IITK7XNLiXLIYgicAWAAAAB4BnhhqR/8BxX6U0rIOkxAOOFhjk1MAAhnWwH7dF1wAAAA2QZoaSahBbJlMCE///fEAEs57AdTEgAmC5ENKkQjOYXpehWRn7OaDF/RRBLGX4eN3PzEGkdtVAAAAbEGaO0nhClJlMCE//fEAIMjr+c2OFQn0XwZQAPgo8QzFvkop2Ga/Np0MNxClxtruUXJfU7cN4QxyvtE2rvs8hCWC+feyxi/9anSMDtFIVHe6I5f9UAHOwFK2RCOuNsvb9RoC7/G6RPk8EJMDwAAAADFBmlxJ4Q6JlMCE//3xABNuiaze5PIt+gBMlH9ZCDmy32iZKEYQDcbar3AdX0cHNMo4AAAAaUGafUnhDyZTAhP//fEAIMjr+c2OFQn7mrjhtWd8YAJxJxZ1U5g2QCrqkAh13qXHUUWLodcAg695YvrlkRQ8GUafUXqGtOstK2HLnXaK+DVOwjrqbraAMGH4GNN0bbKFvxG/QEvfO+ev2QAAADZBmp5J4Q8mUwIT//3xABLOewHUxIAODnfrI4cG+P1P8MuEMPDI7aI4zVJZ9yMJdtsfjAMHodEAAABUQZq/SeEPJlMCE//98QAgyOv5zY4VCfEPo/zPBIqACZ103owMa7Iz//3mw3NKwieLOq2cGBHSfe0WRKChj5kG0a84P6/Th0BGUo4g4mQtzI3qe0TtAAAAMkGawEnhDyZTAhX//jhAB5bS6plUox1YncABI8bIMPHlV3930jomIerO3yhAUQcPfcxsAAAAcUGa4UnhDyZTAhX//jhADW2Y2EIcVs8/OdWXUhMABBeeSSTUxcHc+SAecIXXM07bwRk3//9IcMhq0OZ/D1ekGEPnPHv264ged2XB6Nz94DLo/5KzWQGIg6S/C4ZrwV2Xty24hu1BU/fSkE1G6j6aNtuAAAAAP0GbAknhDyZTAhf//oywAfLuNb+uI0iAASRrhMvRhqPBMgVj7VIhC29vMiUPEqBMA6xPZm4EtE4FfW210fZIQQAAAGhBmyZJ4Q8mUwIV//44QAeYrLbbIbABNIiWiOTbvn43qPPuUMjTXvq0nQwvu2E08zVIyHjRDabQiE4IQoJAge4Oh/TGqMyJImMwcybGlaU9zuGfHscIrxk7d6/wvjCjf9qqpB7L9Jr4YAAAAFhBn0RFETwj/wEeCjnPkUqjgU62b2LnY0ZowAJwOQbimAIK3+QJaa2+mBYBPh/gfXzNlfd6U+SLKVM8boGCMLPAbwkq5BZJIrarCZuMjFwRZU7jT2C+lLGIAAAAEwGfY3RH/wHEh9YVNiI1dE8x0+EAAAAlAZ9lakf/AcTJRlRkjWE1XWaQhU54AJs5rsbW0CXwPmXGWoqRTwAAAGRBm2pJqEFomUwIT//98QAS7om1GLhTHItAAhGF3CLE+sB1h/NjlAMs2ZkQ49ns95zza8TPdJ1oCQOi3rTTYj++IXlbbyeNcbMU9v+kPIhhgwTHAWcq3/FsR5ddQCiRgEYOF1iNAAAARkGfiEURLCP/AR4ps8HJ7Ribm+rnumQ+4APtG+TBrS5MOIjOrgdxJgTS4m6ucqp+gf9Ttv3fm1gLR9FS929KMGXxXLqF7QkAAAAdAZ+ndEf/AcSH1hU2HKmTB/0/w7/WkADZ6y6JY1oAAAAeAZ+pakf/AcTJRlRkl5ilx7pPbCH5BoAA2esuiWRdAAAAY0Gbq0moQWyZTAhP//3xACDGoyIlIWMWLq5jR8xgAtWb9ZInUzS8gvKIH1E0NBHp+/gNaxhP7X+8/cton0t3mCSWU5sQZgK/2+q3csCOI8B9UHXZk/UYDU0/LhtG/9LyWKK1UAAAACtBm8xJ4QpSZTAhP/3xABJOewHUxIAIboZolCdR3Ry8eHsD5KwA1BCKm3bfAAAAb0Gb7UnhDomUwIV//jhADW2Y2EIcVs8783cZPeoM4AIb1Q9C9ph5RaB2EhGvYZ7Hf8gDM9vc0nJtlr8yjPME+g4GbgT7w04/pmSVu7XpdQqD2f6J4Bl9USxl+Ai7Dz6uRkDziY7OZUmxCntGcB7sYQAAADlBmg5J4Q8mUwIV//44QAdnSlNmkNYFy4AGwa9o9aRftS7NSxloY6/nS6xaXENPs3AKmdtV9JuvWeIAAABcQZoySeEPJlMCE//98QASSYeyKmpNaACdvLfquVxc70IUbg60xXRuly9gwNCBulUeVDuqK9axjRsx9D9SKZy8kmqcGp6/VMAHRLfzi0fBqbJlxVQuMb2DdCTtt8AAAAAnQZ5QRRE8I/8BHgo5z5FKhcJTaH8HTNS2rxTyAFz5OE2eijCqA7AxAAAAEgGeb3RH/wHEh9YVNiKd40X6IAAAABIBnnFqR/8BxMlGVGSa57/k/C8AAAAfQZpzSahBaJlMCFf//jhADWztmL57QmYh1vkWJhkK4AAAAGRBmpVJ4QpSZTBREsJ//fEAIMajIiUhYxYurjS4i8YAJxaXExgDPew/A5inmMbOdOWCH5c08y4ryY2uNSuSra/uWdFrN2+Bj5GbzFzpDaXuTqgHpS20SXWROnihar2nT/YSt0ehAAAAIQGetGpH/wHFfpTSsgwWlPyfOeTAA1qAWvOBwpIdELmPQQAAAC5BmrZJ4Q6JlMCFf/44QAdnRXnjhqAC4r+W6dL2JjXTUzEVP7QKJAplVJ2T38iZAAAAcEGa10nhDyZTAhX//jhADW2Y2EIcVs8/dh64bXDsR2uADVaWcZ/LqcgcZcjG6T8bhApluDUFPtEYKexR0r6wjbFcuv+DWtT0sqWBB8GkPdSb96kP2NevlL310dw8hz1o5t6oxXLloeWgXxDHypu2P0EAAAApQZr4SeEPJlMCFf/+OEAHn3/mwi/InPDKrSADiz5S8d2foKCk4vRQjKgAAAB1QZscSeEPJlMCFf/+OEAHkxRIWFgA4Nah37BsMYZNguWmzSGOPqNm/4EFrnmwz7uLpa7jWMODonzoEm0gk8UF1RFO5Mp/dTgdUF4D+F3RgWdQvRgmwPDI//F3r0YkRtw/goxgOeP1axB2/sYxPhEIJmivQfDAAAAARUGfOkURPCP/AR4KOc+RSoXCNY6cb7lXJwAhAnRE8c1WhMOQhRqamyBCWN3uqnPpO/3ZTrsLSUVGtyJpejwwTz75EQU7QQAAAB4Bn1l0R/8BxIfWFTYiRBj0m4oa87bWAACGSpQuF8AAAAAmAZ9bakf/AcTJRlRvH5bSGQXUUBAAm3+5Da2vGX9GO/asOX2PzV4AAABvQZtfSahBaJlMCE///fEAEuhK1xTH6gA7fPRwX2lYR/qtgl+u+bvqjxg3vDaLCMNn6NTp3htsN49ehXc1pcFVJqbfrOYHV2UBmc/10huNclOCMuYDQMfuddWWpswP1ebif49sXRnxj2/ncjXg8cCBAAAAUkGffUURLH8Bxe7duqYXjDNN1+2QogAuK0sh8nWaG7JZbnMp9ygjVvAO3ip0dZw4F/l88tXG3+gCksQsnplbpIySd1sONUsi6/teFuVyWuYf+1sAAAAXAZ+eakf/AcV+lNKyDUaP8t+O4LZYQ+EAAABlQZuBSahBbJlMFEwn//3xACDGoyIlIWMaiopjRkgBVLrun8je5QJ/ljT//IGef6HM8bGvZfZSU3TnLfXDWQUfTQenOIUuVs0MOEiYVIk223h++ynVri5ZXSMpw2+10dsaOuoGj2AAAAAlAZ+gakf/AcV+lNKxZ1xVLzyMkzk5mACHyrNBCQ7i+TOrwZXjWAAAACBBm6JJ4QpSZTAhP/3xABLObP/Zf0mJsALb1/Whe6oC+QAAAFhBm8NJ4Q6JlMCE//3xACDI6/nNjhUJ+YuOoYgAfRB6UoKwpnnXBOB1ezYSFNbI4nZlZsE7dUORMCNQ56qG2pHEgYLhwCOCf+GMqAck2XaGH8TjAEOaK9moAAAAK0Gb5EnhDyZTAhP//fEAEs5s7z7pfAFzgBbev60Jf4HO59/LdrJa3IpsN4AAAABdQZoFSeEPJlMCE//98QAgyOv5zY4VCfuauMl2YwATjm/RFFhTw+Aquxv56Pb+Z5pwLKUnM5b8W34fCDr8EwIMx8qrMIL/LHNeBj7Mb1U4JohjfcoMGE1ARYiBgH6hAAAAL0GaJknhDyZTAhP//fEAEs5tAdTEgAuFD4iBWFDRnsdrEzsGzPtVbREbl2a5y9tUAAAAakGaR0nhDyZTAhP//fEAIMjr+c2OFQn7mrnfPvfGACcc35TBCx4GAJAei0aey8GdYek74ihAtgf4Vw6z1Qejxz1MRuCfrdMjeow170cFGtF3TREkbk14ZmaM16YRmZ1gqu+BdMAZwivXXA8AAAAxQZpoSeEPJlMCFf/+OEAHk0Vzh62Y2XlABdBdJ3870u3ASIL1mkldGgYV28Ob6YbLeQAAAGhBmolJ4Q8mUwIV//44QA1tmNhCHFbPPoI79EAHsQBkyPc1M/GGbKb8bRTxRLZoxD0dRUeV3HH/1S9iraxb4DR5GcRNHY3KtZUUHQCMtyDh/vcMI2fjhoqgTQqYfMralB0E3LD+i+eTsAAAAIRBmqtJ4Q8mUwURPCv//jhADWztmL57QmdEQVFjagCHqxW5ScZvKU3nOcTT3ZcRCxlgNTBWclLr9Y9/dZx3h4g+KgXRoeE+b8AQz/rjKwzKlXi+TeO5NcFlS4v2fvawQk+ZqmRDGEms+PsSj2Hhc5STzoUw9JCjXO6tYqLwSO6BPD6LGrEAAAAmAZ7Kakf/AcV+lNKyD9mJzcejqhABMYfAUwF9gAvPPgwOCCeH2sAAAABhQZrPSeEPJlMCE//98QATaEigV3a8AJX1pWkr/CRmCtamhwKd/A/y8jHlt5WbtX8AxUNKm2MSGBdk9uhotzYJxE8nGpwxa1s4Vwp14y/lyyB8HDWH+S7RT7fBYO2rN6eb6wAAAE5Bnu1FETwj/wEeKbPByfDUgooajB+qdRAAnF3Q7HpNtUR+0KNuuTZJz94TPKoEevGqDHEtrzcbSOQEdRnPisSh0mMsh34ld77ECcUv78sAAAAgAZ8MdEf/AcWvikMKsQvGEVXBIQAQcKz8lc0afOM3LsAAAAAmAZ8Oakf/AcV+lNKyDni03N/yBtmkACb2TV1QmcSBQtll54HOmUAAAAA4QZsQSahBaJlMCE///fEAE05sR6qAwU4mEAFz6/rQvdS4Lim04uKMPHousP3qt6z0KI0mepg1uhkAAABeQZsxSeEKUmUwIT/98QAgyOv5zY4VChT9sxDDIADRRTWnDu/sJj5lt//6mN9ewTY2YfXgaE3sufLpaG5Q4yMW/q8GBEw8eEeIcq+9J8oVeol0B9uDMhx8W0MmxvrJxAAAACJBm1JJ4Q6JlMCE//3xABNObP/Zf0mSAACb88xU+OCtca/FAAAAYEGbc0nhDyZTAhX//jhADW2Y2EIcVs9ChYLK6ACFb8WeLUDfjp9HwnlaKDGIuvI3Ct3B2TEjN7z3vJi3OiShSiOBG0O6Zre5N9XdiqsBxr9wst+V2XmdW9Olvs3MgUZLwAAAAGZBm5VJ4Q8mUwURPCf//fEAIMajIiUhYydv+9lhsbDCcAE4tLiYwBnvYfgcxTzGNnOnLBD8uaeZcV5MbXGpXJVtf3LOi1hegB5iD7NFCDuSI+ZOADwlWzhS8UX7g7cJflf7NWy+u+EAAAAfAZ+0akf/AcV+lNKyDlMGgM7Em/ACEyrNBIpRo/8uQQAAAC9Bm7ZJ4Q8mUwIV//44QAe/RXnjhqACcadrS0VmltuAqNQ+O9CgJEyEsXPH/SrYGQAAAG9Bm9dJ4Q8mUwIV//44QA1tmhEzS85TIl2EzpyTz8oAs1gA1WlnGfy6nIHGXIxuk/G4QKZbg1BT7RGCnsUdK+sI2xXLr/g1rU9LKlgQfBpD3Um/epD9jXjaNyACPYYBmpSQs9ggOrORzpN2lD1DOysAAAApQZv4SeEPJlMCF//+jLACABaHBPGSTPJKt5AB+FKVKW3aZjWb2t6rynAAAABxQZocSeEPJlMCFf/+OEAH6xRIWFgA4Nah37BsMYZNguWmzSGOPqNm/4EFrnmwz7uLpa7jWMODonzoEm0gk8UF1RFO5Mp/dTgdUF4D+F3RgWdQvRgmoAXhFL5bnk3Dc5Z483fwEj+zj/k8q4hjjP3bkiAAAABEQZ46RRE8I/8BHgo5z5FLQf+zCfxRlCABCBOiJ45qtCYchCjU1NkCEsbvdVOfSd/uxqT6YCBGpyr1z6PDBWZfD1MEP8EAAAAeAZ5ZdEf/AcSH1hU4WMHtBHecvgB8sABD5UFTU1lUAAAAKQGeW2pH/wHEyUZUb1jB6NXdN483UAD6qHepra8Zf0WW+Zqg36KBYzI4AAAAb0GaX0moQWiZTAhX//44QAf0nIEaOdiAD4pKHcUBc/EUD5gfS/CviN/RuySOvN+Ft6NTp3htsN49ehXla2cZqbM9HZBE3Ial3T7/gP9tLoRn5c9AOaOM1bS/ybgQ5BnNP/Dl5i1R63tjFoaqXPyekQAAAFJBnn1FESx/AcXu3bqmIV4QHN7Y52AC4rSyHydZobsllucyn3KCNW7cENKH3MtHDW0mtGwk6b2Zxv+nKoeBWAND4Mj0XyaapTrNOI6BHRj7+hqBAAAAFwGenmpH/wHFfpTSsg/xtNzbDuC2WDfhAAAAY0GagUmoQWyZTBRMK//+OEANbO2YvntCZ+kPUUT5ACRBpMg+d7bPoaeAT/qP4GGPu5BbLNJ7IPJOeqKFHaYaAzQen7ka8ZPASjTAGc4U223iNglXQjbPo+b3oJj2WhfkPmaNkAAAACMBnqBqR/8BxX6U0rIPvViXn0efQQEACHyrNBIkpC5UIHJ2BwAAACZBmqJJ4QpSZTAhX/44QAfrRXlaVEJdmABLJVJ38704oPnTyxUd7QAAAF5BmsNJ4Q6JlMCF//6MsAN5ehQmRIQqFScimmbD+qwAcbi9EHJauVPz/khdN+VX0wflDaLtQwRxfbVOPPXfwb+R/F9WdOe2Zivh3qsalRrvu9sRITUmQ2/B5ahjf/ugAAAALUGa50nhDyZTAhX//jhAB+/ZDr+cH2g+V2g74ABFMpOssWqf7iSPHmiWRbla6AAAACNBnwVFETwj/wEeKbPByfDSPBI8g0+ByaXjkIAEPnx5d+wpuQAAAEcBnyR0R/8Bxa+KQwquY7Dz6V7ABylTqQJ6TnlV1+L7ZepjnGT8BNHeHsc0pRGrfHzPD+J2Mu6HF7+9Wtk64fkRg67rfU9Q4AAAABwBnyZqR/8BxX6U0rIP8fNAOT7CagAEM78ay7g3AAAAb0GbK0moQWiZTAhP//3xABPXcIn5AAJ28rjDIjOC6vJ5s1eeSVO065jwCmc92pJBE9RHY8LvE8ju6oQh/lemvMnK2448xCCS9P8wyhArV6WsQrVVE0LAqQsiFCsfCSPblforgth2TlPFm0vADzWDwQAAAFVBn0lFESwj/wEeKbPByfDTSMrN/WU7gBNR0nFHQA+/1S2UsUfbM9cdU0XshUiA4hjWZOPEUp4hiAghTO4VHYktwKPmvC/bexD5L2T87mOzrrEXB970AAAAJAGfaHRH/wHFr4pDCrDEZZZIEwAQck7ROgdL+JEYI4aSCnT2RwAAACABn2pqR/8BxX6U0rIP8fDlpVRTMcEACFsFoNKdAffgtQAAAD1Bm2xJqEFsmUwIT//98QAT2Ch4Cq/rbgEwzv1lT/+/ZJAOSauZug80HVM3cxkjXMBHp9NzQv88H5kFBG4hAAAAd0GbjUnhClJlMCE//fEAIMjr+c2OFQo3LHloL0qtrFACaOX3T6cp3xHz+LFJqgv/xrd8keDQgmPKzH8/1wy10gA19vvr7FhIyXN6+s22nIx5+gSl7M3HA0OSS2FKefNGOZb9MLHkeDNN0/BYu/cZu7x5y2vzkRBZAAAANkGbrknhDomUwIT//fEAE/5PsFBZV/8QAUH48RFafUeomu9J+/QATmXINdDE6kkv267dSQbsQAAAAFlBm89J4Q8mUwIT//3xACDI6/nNjhUKDQ6S3BmLYmIAHvKcQO+IFw8hmkcbD++U81FtnXIkwRPaiBvvT4eG7IPiwWQUUeW0+Vdxhhx+j9MZMsyMW+O0q0TyXgAAACBBm/BJ4Q8mUwIV//44QAe/SllbOcqTUAITnzMQSR16DQAAAGdBmhNJ4Q8mUwIT//3xABNuIONJlupABKkiEJhwMaAwj0GyuU7PGYzQIwFcwPIRcZyQ28TxFMFZxBuUUC5IDs1/Xcxu2YdI7vVRQ+tyhscwMtRQQ+v/ZqeHYr/syTYgiX0sY5FXoBaAAAAAUEGeMUURPH8BxbiTleQKWCoCVS2k0ACS1b/+h2Pvq2Bf7jgrGD+qasB53ZCLY29VK0L0O07Y+86I0YpRMaiK8pz0Rxpmt7lZRxGXd0OL/3bhAAAAIQGeUmpH/wHFfpTSsg+jBVAi1Lt3u4IAQo34Mu78cwhsMAAAADJBmlRJqEFomUwIT//98QATTnrvPuir39AC1ueh8giuuL4tgydLZj09LfkDsIP9ri7mUQAAAGhBmnVJ4QpSZTAhP/3xACDI6/nNjhUKGZq407lK8gATjTsM24TRyadQr1046jPsNWPHyCo/Q080zGBG9NhZNdMW7FZWy49mv+YBnetfl1OsLV9aLP08Hh8NNU8t9GfZgYoA4TBvlGmVgQAAADNBmpZJ4Q6JlMCFf/44QAe/SlOAbn8G3lABxXoQBQn475o8cwldOe0ZK3tdRuK3xQncuJkAAABnQZq3SeEPJlMCFf/+OEANbZjYQhxWz0MHojyKACY6M2tDH6xE8bo3ng7QhaCZkfrLzsB2DgAks0J91nBoRL/BlWn/kqOb9+q3b7nj0duVh2Izynx9taBsJ/vVlKUqOz32l/k/j1+2rQAAAHhBmtlJ4Q8mUwURPCv//jhADWztmL57QmdGE1Kbq+lACBHGDxdRxjUrUXbsxhGCe69zPBzd9llAbRRK3R35gS5LFcwJjY3SJMmh9PYwB1GWFGwUG9JpK9ZlLIMJtBE23Ch/xAa5K7KzxpY3Pr2HNHzWY91GOgz+fiAAAAAlAZ74akf/AcV+lNKyD6MFUCGgsQKep34AJ1KwmAw2aHvSxkdcsAAAAGxBmv1J4Q8mUwIT//3xABNUUhIt14AW6NwL7Yd/32bxAS9vvIF3rR3nSM9Sfvn6ISeS4UR4Fczp4g6QBj4gMmrMm4VyaQ+DQlZ3AovnWgA54ggsDqrOP8Y7RyTOAQfg3Nech7g8m6tP7D4PxvMAAABPQZ8bRRE8I/8BHimzwcnw0z/zcKmsjchX8AJhuCWIpo1PPkVUzMUTkk0kLuaroJklsi6UACx7Ck2LUHhGLXkXRG5Z0eDX8FsRFrE+8tp0lgAAACIBnzp0R/8Bxa+KQwqnFAEA9kHnP8AGplFfMyzW7WxofMTAAAAAKAGfPGpH/wHFfpTSsg+jBVAhoLFmX+ACcaIMKP1/qdE0uwdp9YrmdLEAAABAQZs+SahBaJlMCE///fEAE26JsHtCrACFwEEYv1CMkPlbXsFVXR/kYsQYMULoMMTd++dcjccSnBki5QHlosKX1QAAAFlBm19J4QpSZTAhP/3xACDI6/nNjhUJ+TpYKLyAAFpz+AHjWpHogtkmWOoERq9n0NjAeaoaHYp+xgV98jZml8mfvjc5yrTmH7Wgj6o+3tZ+MDGG8a0OXPGagQAAACFBm2BJ4Q6JlMCE//3xABLOewXREJABD6i+vXhrd9EQeCwAAABkQZuBSeEPJlMCE//98QAgyOv5zY4VCfezf10WIAH4TshUmKJVGCLX82cEn2aVDcW5W0wzehoOwgJ5w+nELg1+EffzSt0xgMx2JlAxBXmeL1haaQJuI/c8NTzJ88qeQRsqq/MPYAAAACxBm6JJ4Q8mUwIV//44QAeTSlsqE2IAIfnXLO3GBgkRKBL2n2FgDSH3DrLCwQAAAFlBm8NJ4Q8mUwIV//44QA1tmNhCHFbPP3N3Gi4i6wAbFNgxz4wF/G5YFzLB/lsCMquEmSW4OrqpD0Og8wpe0lJXeJR6g94xVIelPCVBuXH/A/iiVaIoIh33gAAAADpBm+RJ4Q8mUwIX//6MsAHy7lbcAFqb325MREqCfLwWxZ0sCnWM3HGCUugfc0O2cO2LlMXiujeOjdDgAAAAZkGaCEnhDyZTAhX//jhAB59VcHR/RFABCNCVpL0xvianjLP1QX1qboOO4gMMFI43Tywh1r8wyWExKQCIhw09sGK3PNs04D2PGFRkBCh3tf2tW4R838EB/S2awIFTHS2iPFgS0jXwwQAAAE5BniZFETwj/wEeCjnPkUtAmZ7gi9ZdwAmcXywNoavP31hTJOC9H8crk9KVf5hsWUxtLosUGe+co+vLgCk7kDbzXX2S7wBNv33ClrlKk8AAAAAcAZ5FdEf/AcSH1hU4UwYRqzEY2HfUADZ6y6JWtwAAACABnkdqR/8BxMlGVG83nsfayuMNDck7wgAhMqzQRw6X4QAAAGxBmkxJqEFomUwIT//98QAS0tiKsyAARB5b9YmLb2rtpVKDNeKQwHXnAVgkXommjuXPnNjcPm8+3eMnxzqGp3FjGr3p/SNvdYc7ZbIraBdicxAQ9ZFR8BoiI+Bw9uzxV3EEVWYRgsOBGGA2OBAAAABOQZ5qRREsI/8BHimzwcnwzTLla1CoAD6sC3eO/3lo+cCUEaKEqFGUpESQTKzsIxSVzmbZw+o90x/z8gPYXZnyJWJx3wQTipLyw/4tlDeBAAAAJwGeiXRH/wHEh9YVOFG4LjpoZFQOfKAAhtrbLmYTpy5dqV8Fp/zqrAAAACEBnotqR/8BxMlGVG8rynxwJiJ/x/UAD6gfMD1sQc4f14EAAAByQZqNSahBbJlMCE///fEAIMajIiUhYxnCKcvVNE2mR6hLFACZu67CnYmYhbMUxN/mLl29oRaS2GvdpXlXtXfuw9FN9RTYhKk5/zBcuxoqXmMWng0q+J2XSvLIJqueiE8dZfbccfZHbDRtfGMFysUipdW9AAAANUGarknhClJlMCE//fEAEu6JsHtCq/+IAGvVPERWn1P7/JiT/foAJzLhsAMLvpUB46OZS5wIAAAAWUGaz0nhDomUwIV//jhADW2Y2EIcVs86oaph2PdoCYgBAjwrKWSmpjcMP1Vf3xElzUCzMwSHTnRzNV6B4kQnpKAi9Cilnewa13X15Wk36pvxmXHx81emiJlWAAAAI0Ga8EnhDyZTAhX//jhAB2dKWVs5yptAAIaH1mPhQE1EXWonAAAAZUGbE0nhDyZTAhP//fEAEm4g40mW6kAEqSIQmHAxoDCPQbK5Ts8ZjNAjAVzA8hFxnJDbxPEUwVnEG5RQLkgOzX9dzG7Zh0ju9VFD63KGxzA20lQ0++cgjWzL5L4BFrDcASG9qECUAAAAT0GfMUURPH8BxbiTleQKUmxZB9E4SHoDACRcS11VnNR5kmcHuJVLj8kTqsE/UtmT2M3iFs8tVQM+KIMY+gMMHzr0pOgkxGTIIrhCrh9M8esAAAAlAZ9Sakf/AcV+lNKyD+O44GgU1vOSHepDIgAhV9UHQMiwtHPFOAAAADJBm1RJqEFomUwIV//+OEAHZ0pTaib4Fy4AGxgErCnEcns6z1T52gVO/7Zc152fWTezxQAAAGZBm3VJ4QpSZTAhX/44QA1tmNhCHFbPO7DCQ2gAnHVHY2p9yDqj9FqT3NeRWo1VLPZBEpBrAzlrKvDH0Za647fta6aY0ZLtW4n63t4hStEb0pZIOGVdMnNgb7dsrv5C3KboEWGI0ekAAAAUQZuZSeEOiZTAhP/98QASU1+q10sAAAA3QZ+3RRE8I/8BHimzwcnw1O/NThTjH1/ZrGgBa1lM8hVf6T65i/Zk78U7gzUGiDW1A+Lh3lT31wAAABMBn9Z0R/8Bxa+KQwqxAZDJOE9AAAAAFAGf2GpH/wHFfpTSsg/ZQg3bgCn8AAAALkGb2kmoQWiZTAhP//3xABJObQHUxIAJxwuhvOvMPUKYLtTBd/mVL0+Eqnt57b8AAABfQZv7SeEKUmUwIV/+OEANbZjYQhxWzz92Hrhs7b0fFACD9UPPqGg5g51EWzD9y4O9N/BLC3RT1k58vkNerAIV+RWrQ6+QL/vDV7ABJ54wAvnvIgN5C+hHfgqM5PPszegAAAA5QZocSeEOiZTAhX/+OEAHn3/mwi/KvqeAC1bR2NT//x1hFJJpmA7fwjxbYY3k3FggSLT+KVrHY/AyAAAAd0GaIEnhDyZTAhP//fEAEs3eHE3OjbGAAcrBQo2kCJFd85irQm/T7mzIT+BALGuFJ///+3Vju3q14NLDjVD2iYkhxUzxU0lnGqyRCEuq07i26Io58xgCb451egUgLKhbi8iTKgHXQtK6/DeRg2jGnnRxiPXnq9/DAAAATEGeXkURPCP/AR4KOc+RSxTJh6aK4JusC4n6ACCaxxI22769kclguJGTIkWqWj4O0tei7Mu4HhdHU7rPyaAHclN2c/yEiD2sMqJHV1EAAAAfAZ59dEf/AcSH1hU4Ubg+g7rhjKGJQFkAITKwl+olewAAACEBnn9qR/8BxMlGVGwFqXo6sxTZnPx3/XzYAEPlYS/UVOoAAAB2QZphSahBaJlMCE///fEAIMajIiUhYxlyrPZoAbry36l/3K30zx0grSF8gyq+bom/lRzpB6sxB2PoL70P+1ANtnxu8ARp1MljYKZON8WCkARdvXB9nY+SyTbYziHlzDdfzTlFTWztRL10HYtMIpefq+ujSX5G8AAAADpBmoJJ4QpSZTAhX/44QAeTRUZefCdkoAWuAT13X60e6FHfrtVxV5q+aBWo0mh9/FmH2JflNnh88fDBAAAAU0Gao0nhDomUwIV//jhADW2Y2EIcVs8/OXHlnrSwAg/UDXT9THU3I2snQ0Ps12zj6OedWVaoQ0OLZQ9ZcRpxQZC3w05AhrxpRJB5KVd9DiB5zxXCAAAAWUGax0nhDyZTAhP//fEAEu6JzdwAq2ZBeq6XQibHf2/qTx/nif/aU35P5zaCPYqSuuilWOSx3IO/8irkjbuZFrFxhg11CvNkOfJuFa2IJjOWhIZQzov4ZN4YAAAAVUGe5UURPCP/AR4ps8HJ7/KrWmVb7KgAPgYmJXTre+APUABeU9U34y3CjPlRI6orj1eORODqUV/QkgVcr9w55zrAvPOVyta7ajpFstixKJC4buOkv3kAAAAmAZ8EdEf/AcWvikMJZZtJFmxXJxqiABDcxIKUa/2wBRkAVCZtssoAAAAiAZ8Gakf/AcV+lNKyDjmNslKzAgtDHJOqVAA2esuiVkP1gQAAAGJBmwlJqEFomUwU8J/98QAgxqMiJSFjGu6uMoYUYAJxyqqv1tj0YJ5dg7E6MbV6pxLIbIIzAXS5abZAAWk9uMCtuwylkYxzGTSw7xYw5TN3vsqbie2OQuERCcWtf4+59X3ZqQAAAB0BnyhqR/8BxX6U0rIOOZErXUe+b4cAEPlWaCNbgAAAADRBmypJ4QpSZTAhP/3xABLObO8+6Kvf0AJlp2GDYyvWa07ylye9odpJ0p1bO7J5W9VVnYIhAAAAW0GbS0nhDomUwIT//fEAIMjr+c2OFQn3t7sZQlAA/FMAyP/9oeE4fsJWqbAxWNMRKLKalzNMYwDtiKnCq+6IuJte+tZjakH1SNfHa3c0vugLHDnw3/YoF4ejn7AAAAAsQZtsSeEPJlMCE//98QASzm0F0R1QAC4W1Qe18Bbp3NZpIHalnbNa4yaO6oEAAABwQZuNSeEPJlMCE//98QAgyOv5zY4VCfQzcb6AE1ePfXUt9D99zRny+1Z9HnQ+BSdwoqDtLMLnrQ2PuGtUKxqplp0pXxhv6enwuwbPCsy/NQDOupN1V/NbZHhS+WHr6pdiRC0igwJ0cfvW2EflZ9x2awAAADBBm65J4Q8mUwIV//44QAeTRXsqE2IARfsanhNcD0HfuR2wDO6li1LH6vDO557GrdUAAABmQZvPSeEPJlMCFf/+OEANbZjYQhxWzz8re/yUoKIAEPkNBO3ay5VLEEgjQsNXpn7T44DMrrkeR+Nt8Roprye5mvjoHH7UhNE8qnrd1PdHQVX7IiueSpZvgAYHc6h6B5112AZCNdw0AAAAcUGb8UnhDyZTBRE8K//+OEANbPExBJqyqstDM/cDjG+AFcCx/7jC3rZp0iamqU0jMAg4/JYCyd0AKGl9PdIuFMDCg8ATHRz9tvVYZbgYu9CxwlAX5tml5URWIDhlv46pVg5ImYYK+fcPb3dF3ySfUfzBAAAAJwGeEGpH/wHFfpTSshAc4bT0QHJbCACZXq82UNu34NuQsWn3d/4bsAAAAHpBmhVJ4Q8mUwIT//3xABNN5j6eXgBWNshBTfTA/tjU3ETPS3h9g9nfLpgn2Ce2NnRcZTQjNYtqBM9zHV2Lss6TAWatnm+ruhywS76jdXuJE3wO828ISYvORz3CnAbybCwlcMvpzz3qC27fvf68ADoYDJ0B5gQ4ir0GGQAAAE5BnjNFETwj/wEeKbPByfDMwjHqfOWZgAJ22Oo6n6z9nJ0JUAp4AOfG+NEivq/cXMXEdMx6FTMD0GVGuutT0Cq8ctVgHqyC5UBf6BlAy34AAAAgAZ5SdEf/AcWvikMKsAjpfDo5Qokxein+ADZ6y6JXHYEAAAAmAZ5Uakf/AcV+lNKyEB0qVm7zQGalKAD7lz/dEpmMv8bvTJXXHwsAAAA6QZpWSahBaJlMCFf//jhAB8M/4F4jlhuTTfJABs+1QUK6/LVZ/tGyBJ8VZlcTmGVFBWSSE0cZ+7cmQQAAAGNBmndJ4QpSZTAhX/44QA1tmNhCHFbPQq7fzIoAJlV6dFxV7HTyBarhE2O80cUN11qwdsmEaihrHXJ80boeVG8AVLQ0xQ3ZJHIdEVQI7g6a3BFkJ+iusquD4xGI2HeFM6Uj96sAAAAlQZqYSeEOiZTAhf/+jLACABaHBPGbdiLgAKjVb7vpkwb59GeU/gAAAFRBmrlJ4Q8mUwI///yEAMzN4M4sh9GPs8Q3gAL0i5Mf63aQYQh2ZwPch+n8nfHdkAoo44X98byuYcqNMcWcsbkOtJbql1E9WOSUvuZ4KpeKL7U2A4AAAAokZYiCAAz//vbsvgU2FMhQlxCcfBKflMCjfgnuYTf3FHED8F/ahi04rYAVx/L25WLbBBqRBb9VyNNv4ngg4MaYkCyKOSFNwPUrgPbJ9/MzVkXLKyF9kW8S+c/Wp+KT/R0bcZ3AN9TdiadmZoHPL+WYYcdZHbIdL9Y0TUT1j8RS7fFV0YPLRXOWQ8Q6vGyR7DCrPbMF/2XVp5RfJqX4ywIBdY0RiP57Qcn7xjTK4FhQlOdy/6vDXs5HSEpLoDqCumrCRe867p6SyvnMSBjzw1eh/59v5hKtCkHcKJx5BoSaqclUx3+I+xbycsAL/bmsHR9xj50Rk9tLX1IxmbUpqRwJBtz6Gl6hfbmkMKCqIKUXLRTM56zKUGYvTJJGXJcw1OEFaK77Qs7Ww6/h+LeQtSlzyRtoRjFSo+RJWgG0haDpZSuFE+ox9MXpkkjLkrBfYIN0BawZQC1A73B7QJFsJdyF+jN0SdP/rlk8yOO2EVQnjQ1DZ/8yar5sEPcN5sIw9m/95+IKegHxG4tq6InbfL2Mn2S9l3/bnPO72lgQNL/7F8iJQpkPoGvBW7BNF/7x3KE6lL4n9mlspyHIqQpNRJn5DEo/Xpo8x6nGfjPaela4rJrd6kyEe+POru0C17fEd5uAy908qgdmznYytMd9xFahfbj3Uso3oMFnNZsis9MWCPpNa3OueIPaGjNObNPjH36bLjPdsyxtku2Wil0bcqn99XCCm4vgIkZsnE8YLvuCTbJ/85m/Nz+uQbEyjexIUiV6yCbCoapKJp/ycILt+viAtXD7lSrZExBpvdEeK2ML6E3zPeSFca4/3mOZFW0Ikv+PQh+9BPmOi5fbu03a0hrXCo75OuTTjdDZ5bIm7ZHK0fJdmBQarSog/zluT4VwGk/4aNUX/D/D+WTFeHyOe0YshtUpxTlU/5ZnQQMTn6DUUJVK3d9B1xAmpQC90VUyL9B1kGuE5HnrKCubH5JDlXU/jgyVDJUox1qq5sYdnYF0jZG+UJpPC7QJO1wmdVX2ut45dQW41xu5YCvs8lzuXuWnNNAJgX+cMmxK6chCZP+/1+GICk+z02ZFsW4FZjgkimQCI1nOl9Alqd1vJWGHWUw2H8E/7XxHnTe0I2XpD5AaZi9roo9PSo7o9hEQpBvNi6LH9k6/kXLFfKfVxEfcij+gXZ/K45rOEZTVfTA1dLEBz+h9PTH3lIILIBrhU0VOHFRYSw5AEz1QbfCjZT/qHpRloPhnmHVKbyp4p5Nc5ukf3I38r7aoHX55u4zKbr2UN/oA/eHdCps15Iva5WPwz64xIQ3AXcJLozIo3IMsYh1zGvACPgn2/6QOfhdG0+htTaaDLv+uf+YDWLDVuZvZcXmcb3FAMUcVHzxpq3Z5XnvDuxNMbXhOD42qS8alkvIAOMOkN5Sl6in8B0Vc69IPA+qsl3O1A8p60Ka5KaAi1N285F3aJaaY7yt7vcq56q2nOb/rN8YP1u8KCO4H8L4mV4roagHFfGGOcqLWJ3Eiu4k9wcqpOQ/UqJOL6TAHTS9AiHChs39LLkDcwAEw02bOyFf4cY8xlWFsHMRmVw2nCPJdThwloOr0oThG4VhS/fr1xF9x4Vb8iWtbAE7cCL0nAo7ZTBpPvT4rxk4zrnkfLt8kSH7X4aIKGrxNesRXdoZcQ0bLF0vQPqL3Y7Zq9Yys1ebvVZo3GfSZ3mRUr1UbFZNttGASx+FlEcLEahgoMSgVOQ/4ZWHPPPw29u/qq9tG+6kvuFlmBFSha/EXE1+lcE0hCRzaCjDfNPLJB895I0hXaIjmqbEqPHVdhITnukYwwDyjERj9LomIb8BlMWRPwFtWoKMQsKqZK0ejNA7S3IRBeIS6pIJUWJzlvbTGtnXwe0KS2JgEtHJnxy5QoB3JKNr02f4pdVBKbfCbDuLlh0yI9gOiHZNUuBT4Mj3yFu0YEuwu+el9e1b8GhK8VtFjmm3+RGnD2nX1ol2IybwCGCgBWu1df5NfPALYmYx0i7fc8jH+fWb1FDXJ68fHfttTzEjQF5uIT0NG/NrBTo8b5S5XIciXIkFC/z644s3a3dnS5bLDhKAmgOHIF3zRov/A2yo5cbFP+ftWZrZA7mZ6bElMCZoZj1raPilbXul7tvMsB+UuYhxtDChjl7L4UwuWSed//dS9NTKmHumVWKmes+KtKOV29cICpbU68jsPLStEdAQwebBeZyqGmRL2yfcQsFyM2X4/vpsfdVi+wuveRwOu4rUM3IaGgjHD0PefIGhP25AoBBfAbaDlgJ9UpfUwy+ry0E7v4SdYI+WHdl/4onu3CQbZdgD5S0o1Maeg/lycNHhC2TfoMCIScVX9iDWIRvCOULqUPak2R/0Qr550g9eCKQyRZSoyMIT0wD6lmegBfbDnRctXZbgjzaEub0To2u1FWPJ/Xe/DBcgNwVUAjiqkcoOOhWBVg9iWyqoAWPRAdi3ok8U3YsmfCjIkreqX0Cf1OqdMdMT1G6uldnx2DdthnSEGT6FA2xal+9nzhMnjXMp3tpLBJk8voArHw2L/nFJMX0Z93v7FPVpW+ZMwJGQ45zGGBTV3eB3uTYdOIgwY9C5gd6j20wlmAWzrz2HMy0XQi+qr+Apgjc4cWwZ7D8QwmQmDDyXibmq83uT4aRhWbCbdVqBTl4sdPgEyIBmHyGvDFhd7C6OzspyDMA0CALJnpo7GSM1d97vkvmANF7B8vyP7hfeeKxEWa3QFU0h1FIbVADFDpIxWDIEZWiMUSNoudf4DB8vY8/CAzM+b8BJbLYpr3tkuyJm8L6FG3iINu8RJ18HAfOUwJkm7GmKZWVvj4tEejAC+xJGp8oJAARWasBgO4ftXH8DzjsRkhooP3sx73moX0bPd8IUU7zq1qRdx9WHtInjZzIMsd7TjWDs9GfOYyUaeeCRPpdl4ivEjK/F3atEsn0Rt3X2NKm8L4CuFo74btTjMdwTV323TZNgzMYeVnjG10d4LZ9xKK0gEACh3DGaFwaYYf+XtcXJZKetOKTOSAUUha4hnyX+Vkmdf05wbgA/uIEW+u4s/E8Mv4l4RtWHRx0s21+F+Pa/hoJtskmJ2Qwga7Y35W+SHDOHhyBUYVo9N2zzRQlA2YiWnlh4OLb2CAkJixXtYy3q8yFTV1zdyBsMqnqN5I7kKZ+MUVnKuNU7X5iYAZrHsdYFCnwDrGmmbfg/tcs/g9SSBqqWXVyzbxDKPmDURSuIkZkqBt3OkSMdepfjy0uZnCkg1gagl0PSh7PIbwO2Znq5DgRzCMLE59Y7R+7oQgzp2czQrensniW+kNkSJA/IwsnFxEFYXjs36lNLC27Vfha8ZT+5jLVfy5swt8JpwRhBWCo431PQUkoSJjIetPkQTYaaY1afXoA9+1iIKmRm3+Wc0+r7bEkL9gIy7gxIb8O7esFAF4n6HwaZWbx5izUqxOCXkfvT7EaW+olRQN/6mQM+KmUMHBN/lf25tsQAAAI9BmiFsQr/+D/C4AIPNRJkghYwAkQ90Ev35OHq2jDm/MQ2T5dViHqt36ibsxPMh+JpBGqjuz/9GXLeCs92iqjVh0kT+8WfYVgmhpVdXg/Hrtbn/b+imZwtvMjfTIyXZH/UPYCVgLKkPb9oWFEJxdwDtC4Vx3hxBsMI6ROXBhf9hxk5fWhWEDrk0rUZCBlo77AAAAEhBmkI8IZMphCv//jhAGy+ocAC6UZ09uiUDaxKbmH41MtvzxBGuXpL7yuQeycEh1hre1MsIbIcJmmIE7vHvmxQAvP9w2SreukAAAACAQZpmSeEPJlMCE//98QBCfPN+2Uxe+411kMK9D5D4BgAuUSZZcnESK75zFWhN+n3NmQn8CAWNcKT///9urHdvVrwaWHGqHtExJDipnipnPZ9JpEIS6rTuLboijmlGQJvq1qaH2JlbSrjmU0r4JXyW6Q3p47hs3EPNhOHVD+tOwPEAAABTQZ6ERRE8I/8CCvzBwQ0GmLjGKIGgFEu2ZLh1LLC6dywAAQe6RdYWr9TTSS2C+kZMYI6oI+XHECi2MEXaWTjyo7sEFaOVqI5ELSplqSw2CBIPHxEAAAAcAZ6jdEf/AcSH1hU4WMqMSJrmJQFgAIfKwmBrzQAAAB8BnqVqR/8BxMlGVE06LWKmi899+V9fNgAQ+VhMDu0IAAAAdEGap0moQWiZTAhP//3xACDGoyIlIWMlkRXsIALZ5b9S/7m0zTM6QVSML6XFeb1gklHdEH0ZD4bgoBYAMf2hfY6RH0v9cTYe2Xa2Mfk6TR/hwuib9vljzO+Zbh8lNXuxsplEedvJcll+lGlMTikbaozlPfaQAAAANkGayEnhClJlMCFf/jhAB+tFRl58J2SgBa4BK0tfrQyT2F/rsgwjYcQmwvlW6arBFhOG1GpQ8QAAAFVBmulJ4Q6JlMCFf/44QA1tmhEzSZfpkoTPzK5LMsIgAbFi7Ba6ErnIaH9cd7l0uWkY5WSpDGFse7gGegkm6erDTCrO9/eqnCEqtwdVOEeNXy8crV9AAAAAXkGbDUnhDyZTAhX//jhAB+zGfwybAASnFl5ZhpOBao9cn/5xvkG3+P7kmEgK06EGqJur7LrXV9ocsP6mEpdmU6N5v1g4ATmWIYZ2JxX5CcsKir8OZeTgrRQwlrAWX2IAAABTQZ8rRRE8I/8BHimzwcnuIdj2OdYv8KoAD25eJ3FdnK6IYGv5LbbV4bLlEBBrDMyN6+Zt7C1QSLgplhumrOrbS1OPr3GXuvQCzMTFlmdgsqgwE60AAAAkAZ9KdEf/AcWvikMKsMDtqvKAgAQ21nJXcoDaMGZxSwg6gyOAAAAAIAGfTGpH/wHFfpTSsg9xfLSAYlqu3lEggAQ+VZoIwsz5AAAAZkGbT0moQWiZTBTwr/44QA1s7ZjAXjTiUcxLxlDAKABDehU4yBY9GCeX1QXW+/OaqzuvGguPs4p19NsgA5CTYWBW3jtzVkKmuTSw7xEnzgGwN8Q/RNoL9VbSZp8rsaBCPuNvY6Nd4QAAAB8Bn25qR/8BxX6U0rFnaOyl21+eVMZ2biABD5VmgkbqAAAAL0GbcUnhClJlMFLCf/3xACDGoyIlIWMllLu+z1SchJTxwA3MUB/0+VDhtnN2X2hBAAAARwGfkGpH/wHFfpTSsX3Y9G/9LgAA5qnGzorPlc4qdKIpUgIh/B1B8tkcEzEvGj3Umurhh/vR4VGAZEoKgK7R6opJjpjzDCvAAAAAK0GbkknhDomUwIT//fEAE9gpsNEi4ANujoiU31PzEsKDzHrbTWYTzgnPtgkAAAB2QZuzSeEPJlMCFf/+OEANbZjYQhxWz0cxLwdH+gQAEHzpLllN5sgFXICHZ3CUWROClAijqG9vajjz7I6cmwiW8KXKG96Gcrndi7XYQvWvhvxIxvSoY8OftK+ZL1Iw01Sunuy3qftHCeagDBaza50b2SuPXJ4LIQAAAD1Bm9RJ4Q8mUwIV//44QAfrSi5zJlrkgBtXR2M165rayBIpsB7bw4mt1hfCyzaTXdQ6WbkCYNNJysUEO6IeAAAAZkGb+EnhDyZTAhP//fEAE9dwpQIABCzJQjujOfXXnYWZnNNUdboPJSYdT2jboP+eRGxC7JTN8jt7Yxg/YGWFbbn3uKWULhT9o0bdPfb4ZnI47Tt7w6P6Gya1XilWLDAxnrTVm3WDwAAAAEdBnhZFETwj/wEeCjnPkUqlf687x6/gBMtcBm27xEH32J/U5Vs/4j5qX1hGZwnfdm/idYAeHh6jTrIHcdj0cdoFJJ5rOCPEtQAAACcBnjV0R/8BxIfWFThYR5cbmbqAB+H4JMAs0rzWP6iqSEY3twguyOAAAAAiAZ43akf/AcTJRlRvVSwoggSoAE4uDO00rjOPYckUEoJA4QAAAGxBmjlJqEFomUwIT//98QAgxqMiO33aFGmHikp4gAJoyr+POMgUT+nu5A6CwD0crL8Snj79fkTz/smILVZDFy+a+z72/HEWd4+UExLPHlSOooH7xvHTZtNvlny4/RdVli/H9sMeEQTPc3e+YiAAAAAqQZpaSeEKUmUwIT/98QAT/k+s3uK1IVSVFoQ29gAC4WJ1JQUV/Kug6Z7FAAAAa0Gae0nhDomUwIV//jhADW2aETNJls/5PQzP1Jz/kjrmAEKYvT7Qj4rOmROqMCYteZ/I3SzSSGRGFDemzluG6N08axQkMWj/tPF2QHz1/haR33L/RlTISe03+1QIJb3aGMEPIdq9I5hXymVhAAAAL0GanEnhDyZTAhX//jhAB79KWyoT9oAPu948HPKW+BN6mvRwM+5NzizwYGa86mBhAAAAYUGav0nhDyZTAhP//fEAE2ZoyujU4AGxHVd1fMhdfNPXKcsabkBf1vX5xb4zedPeJlQLAU00H6fDDKzPO6ch+qrOowweMapWLkBYh7T1vJ8mUSHbS0ArcmD8EuDnkC/P9C0AAABBQZ7dRRE8fwHFuJOV5ApRJ/yId1k6CAAma4FaBRvKG2IeY3b6MZh9umUNaSjzpEP3XprcdWYJ89/3TF0ewxeMW0gAAAAeAZ7+akf/AcV+lNKyDnj0Qd/WhYADZ60EQGrwA2pAAAAAJkGa4EmoQWiZTAhX//44QAe/SlOGtujRJ4AIfikQ8DEKErdkRTAxAAAAYEGbAUnhClJlMCFf/jhADW2Y2EIcVs9DM3cZgAigATjqjsZzHCLnkGCVX6Xuey9HVjEyChcl7b8eesNcSCXsCeprAlOVhgWRdJ52HYLS5MLi7rwyZgdluk4AsZNFbfGecAAAAHBBmyVJ4Q6JlMCE//3xABNlXzgEgAFqy/Bs0Y3O/znqvXYhCtQnuKSTf1SJYPZcxBhcyWhOQwPeHE/j5ZM11hlCNjxoyWuXsAe4GM9NIkVy/n8aM49TsAMDP1NQkM9AphzH6D9p/25woQ/czBlQWN5AAAAAUEGfQ0URPCP/AR4ps8HJ7iHXc2SigANMjj6KeeR/l3H9qMm3XmtbIzZjZrNqR5wEChfgPx4VBKa9Oc0lqfkjHXQ5Q4QCESa5Ku9lESZvh57xAAAAHQGfYnRH/wHFr4pDCqcTyIjy+KSuMAITKwmBw6G5AAAAJAGfZGpH/wHFfpTSsg4dPMgS0nTeoAEPlYTA55oJ7wHhyu/yrwAAADpBm2ZJqEFomUwIV//+OEAHv0oucyZa5IBA9UitHPvKkgMC2JbCZV6DVefzmG8ESUyprlcLumOW/BMgAAAAb0Gbh0nhClJlMCFf/jhADW2Y2EIcVs9C9cBkw6JYATV297khoGZ5QTJeuAknoyO0ZXgAb1NXVE0/GfPjZRf+zQnicIUwxJdtUt9THDeE1z3coKCHGD2GATvuCX92nKttsSBBZy+l1gGu+GSJE8jKzgAAAGtBm6tJ4Q6JlMCFf/44QAfLf+h5JiLkJQACB0JxEDN9HGrAUo5645nAfp63UrYf+ofmkVsNOlMKpiZvsHIAJNRDG1GFFJ3N4G0WSzUWWN5fXBAy051MAFpSMZitm4GCzx/j1P+q6fXV0MTRGQAAAE9Bn8lFETwj/wEeKbPBye1UTYzynP9h0QAdxM5dJHcRE3zkAieZkh6ppWmILoEOq5iNlQrRorZ061bawqJdIV1J8mu6TPBKwc3+6ahX/vrgAAAAHgGf6HRH/wHFr4pDCrD9+3p4mS8Xc2/wAbPWgLFb7AAAAB8Bn+pqR/8BxX6U0rIP2dH9MK0UmwAAQzr4LhdJhjOBAAAAI0Gb7EmoQWiZTAhX//44QAeTSllbOcqbQAB1bOT4Sdx1RbVAAAAAYUGaEEnhClJlMCE//fEAEu4g4NuG6kADajqdYTIIeI6je680EhbatNFdEmqxasjQANrGSxRN+kUf+4k50BIAK1+HzMlmJFB+PGRirjUM4KfjrWyWrA1NPwZWVSIDTh7NtUEAAABTQZ4uRTRMI/8BHgo5z5FKo+I/Km2p0bQACG4eEdtbVjlWuCfzNeDnSRHLcpTbiFPd69V2Axc8741GX2v+yyLdUu9x1pRY0kak0r5/XDQ8Rt2m1REAAAAeAZ5NdEf/AcSH1hU4Tyfn9chyYAG0EB4RrQK0uGbYAAAAHwGeT2pH/wHEyUZUbx0BAq1euPEAEPlWZ/6ysrBm38EAAAB2QZpRSahBaJlMCE///fEAIMajIiUhYxrurjTkqd8YAJxzv1iYtuuO8vFwuGZtTl1vjdZsghGMvWYpTmOjMxvkXrzOHo/uV6IqY3WR7d6gV57qxRxf8TXCeBz4g/+lzOFKb9/Hxd8csKu31mYTv8X3z16bNNfOiQAAACdBmnJJ4QpSZTAhP/3xABLZAMPoOTxMczcAFrqEONmFGaQdM6MJo6EAAABvQZqTSeEOiZTAhX/+OEANbZjYQhxWzz9zdwdH+gQAEHzpLllN5sgFXICHZ3CUWROClAijqG9vajjz7I6cmwiW8KXKHFiKuqKtGGTYhhf4UQojDhay2e8kv64iB3gUgNmM+SMHT/w9sDRZCTUQP9tvAAAANkGatEnhDyZTAhX//jhAB5NKLnMbru96+ADiz4Sts9kyTp/qXwX2KT4GIHMrk4vAcdTsofuUIAAAAGVBmthJ4Q8mUwIT//3xABLN4bNCAAQsyUI7ozn1152FmZzTVHa+Donwy/TtnOYLzxI2Ot1XRUhrJW3rP/aBv5813gvCMXkOOvaYYyzagpWtoPkONR+96iU/NiJGKLD3A0AC6a3N/wAAAEdBnvZFETwj/wEeCjnPkUqlfjq8ev4ATLY2qezEY1s+6U991WrdCLuS++sYlQ3OCz/x+VrxtJj1PYAHfWapl3x6mmhu6gxnaQAAACYBnxV0R/8BxIfWFThPJ9R7goCABNwApIBZ+eYytzvSvEJp5FrTaAAAACEBnxdqR/8BxMlGVG8dAfkJyWKFEACcMHZH26i0OtDjn18AAABwQZsZSahBaJlMCE///fEAIMajIiUhYxnCKd4ROAEy5uQozRb240m0UUR1g2kjVe2DFh9vOnkg44ecbfMHkwRG3p1buxVkBwkpgPI9oxpyud15XLDVpWx5tRgp27hqRmJ/YBy4qzpbYpL4MPCWO89W8AAAADBBmzpJ4QpSZTAhP/3xABLuiaze5Alo/hsAohcfNViMUxeys8zS1PEeWMkGPRbBTiMAAABmQZtbSeEOiZTAhX/+OEANbZjYQhxWzzvzdSc/5I65gBCmL0+0I+KzpkTqjAmLXmfyN0s0khkRhQ3ps5bhujdPGsUJDFo/7TxdkB89f4Wkd9y/0Rqj/45zJ/JlpSgj4R7lDGkFyfG5AAAALEGbfEnhDyZTAhX//jhAB2dKWyoTYgAnVdqfReTIaL4SRqawkGqh2+KE7jJRAAAAaEGbn0nhDyZTAhP//fEAEm4g4ykQVnwAmXO/GkQXOKYQZ7kc887BUbxe9Lma5wlN0C6H7a176yvWSYYsSCkuNu3PCPEeCz/f5pGk5v5BsdygK1TVnM6lw6u5b7aaZoYGnYpqDWFTfolBAAAAQUGfvUURPH8BxbiTleQKSOf8iHdZOggAJmuDCfa0dzGTN6Cl3iqbRYl2RQUM8rQduw8PFkizBQ0JpdM81U/7318gAAAAIwGf3mpH/wHFfpTSsg0KkSwmm4iJwv0TgAhYBZ5sFMHbkzZgAAAAJ0GbwEmoQWiZTAhX//44QAdnSlsqEAgAbQUE230zB3XYIigxkSHBgQAAAGtBm+FJ4QpSZTAhX/44QA1tmNhCHFbPOwSCzhABInu0dAsZAeLvtrjtaYHJCx4kg1CrICrDv/4mpViq+SlRyGlO2iv9DvNvoGjDZHFnNZFaxU0EggukCjcMscy3zRciI93dO95SCpTTCJ9egAAAABRBmgVJ4Q6JlMCE//3xABJTX6rXSgAAACVBniNFETwj/wEeKbPBye4h1V53otZWxnXr50oAwMYdRWmO6jhhAAAAEgGeQnRH/wHFr4pDCpZBMDAagQAAABIBnkRqR/8BxX6U0rIMIFA8RJUAAAApQZpGSahBaJlMCE///fEAEk5tBdEbgAC28f4sSL2OIGJJUOVxNvEp3fAAAABOQZpnSeEKUmUwIT/98QAgyOv5zY4VCdu3xS4bWAEy536v/aHXp015q8q6vH6cBHMD+WzF/Gt3Fsa2n1rB3MXmrD6jxlDd6phFFfHQJW1UAAAALEGaiEnhDomUwIT//fEAEk5tBdEbgADc09fmIDgvArDc08nkoH3R6vsynu+BAAAAYUGaqUnhDyZTAhX//jhADW2Y2EIcVs86nwMc9JQD3RIAHWgEnCf92vg65oM+hqdSXRIwNSm1oy/Tsj812VwdOVYmL3m2ob0R5xzoCxk63CK+zUwlo01AWc2dYt75KKV8pVgAAAAuQZrKSeEPJlMCFf/+OEAHZ0V7KhNiAC6Bka9dDSOOWlxRoftKYpDGmXhtJZnMTAAAAHFBmu5J4Q8mUwIT//3xABLuIOEZsC4AH88lVV+tsejBO54T0f0Dav8ieViXGO5JANGJRdDgU6Ok4Ca3HYm88kNvRHqAHXtmBgor6K4QQg3oTtLZojo+2u3SfRWU9SlufziqmtEkFTt1XG49R4lW+D+b/wAAAFVBnwxFETwj/wEeCjnPkUrNWJ81lli/3azi1I4AQjqQhKQDn7GjodHKDU/P282ONP0hvoXK42D3T3wJu+T02s+0Xj5n511Xf4UY18FqFm6yPWU6GTldAAAAHwGfK3RH/wHEh9YVOE14LkAVSK/k6z2ABr5K8iSETIcAAAAhAZ8takf/AcTJRlRvHQs6yxlcqva2sAEChF3nmovRbvDhAAAAbEGbL0moQWiZTAhX//44QA1s7Zi+e0JmvOQOBqsALW+mHfN2wGaiesg4nrCFyj3gOCYeVwcHn7tsLAxD6WhIPrXWOqzHht1+/j7Y8/tqkIw0XYWKHUSvXuw9m7n7ADC1ioi1AT203qAnOKktzgAAAGVBm1FJ4QpSZTBREsJ//fEAIMajIiUhYxqECf9iAAmPfmFQWI/NpAwqCOkxZ2vxHUmRbN/kK07Srz/BIZRx0GLPyW4Fbw5kXBctkY3I7r2cTGbMBnqQFKrZ02I+YMgczc6tBmRe9wAAACcBn3BqR/8BxX6U0rF90VWG5ndMjgAD8PuQmPk1DC/uTirdj251tzYAAAA9QZtySeEOiZTAhX/+OEAHk0VOcxuw93r4AIfUvHht+Lxh0EjN8Ck8W6/N6VddsqEn3PFj/K2juZbDJSZQgQAAAGhBm5NJ4Q8mUwIV//44QA1tmNhCHFbPP3N3BQgCAAmd13cpU3cGY3nVcUbtQ3Gpfl8094vixQ/3inOlJvV0pRWt/iSx5oIK2kX+9iX2zREkS8xpYR/9ivI6CdUc7OVc4vBLvACB657bcQAAACBBm7RJ4Q8mUwIX//6MsAHy7TS7StjKloAKjVcWXsxJbQAAAGRBm9hJ4Q8mUwIV//44QAeWxpETTakAIP1OaEzq41hlgVddCUT+fTgQ0WHyxBS96ng+9fTLcnf7STE7Kb1VxhaVfNO7fCWQsltaCaDSiyo2Nq2b+d4PM+h2WdGOUbAJMMeyzv8gAAAAVkGf9kURPCP/AR4KOc+RSqV9BpFsuGtCOLfgAiCwepiZVliqM31h5ZiOm7TLA292sdMYCxemAwf81KDAUjNLyFgCuqPRl3J7FG7a6YpXW/Cm+PDlP/RFAAAAIAGeFXRH/wHEh9YVOE8otntUR24gAh838pO1RW+xtkcqAAAAHgGeF2pH/wHEyUZUbx0KQq1euPEAEPlYTA5zU4qr+QAAAF9BmhxJqEFomUwIT//98QAS5FsNVgbCugAc+1Qco5PCzQJ9QQ5TnRCVfantHK5WMSFpFxQWTsQuVpH+0x8VeSxpgaDzdf/tgAw51AkpodLhX/poC3RE6rD9Ov6Oh2cikAAAAE5BnjpFESwj/wEeKbPBye0agH4kX+uG9sustB/R+AEKMyNKtKDaw82DkOYqueC+vGf9mcThsEC4KYd78wVFZ5w/u2aHzdvJK7D7yIuhrfcAAAAdAZ5ZdEf/AcSH1hU4Tyi2ez5LmONEkAITKwmB3/8AAAAcAZ5bakf/AcTJRlRvHQpBu2r+XWwANnrQFi3/4QAAAGtBml1JqEFsmUwIV//+OEANbO2YvntCZ0Q/LlVgBtkZutRUMSmPlHbivyQ2pe82i6abanmwKnPB1YUb2dquM4cyDx/7hSZs59KNurV8zK7gLtP9yweU1SkDfWxzadx9PtK9EhgMchPdxfOriQAAAGZBmn9J4QpSZTBRUsJ//fEAIMajIiUhYx8KmwicANtQmtMpoJkJdeW54G8xwTVZx/wIJz4zoUE5fr4IrQxYz1dPLLhhEjbmNex4d7vATx28QfgDhXwVIyypdp+OORQhus4fgUEXDbAAAAAlAZ6eakf/AcV+lNKyDni03QiJUACcZOtgwLeOUqGYcE+gkkl0KAAAADRBmoBJ4Q6JlMCFf/44QAe/RTWUlbpBQAtcAnrhd58PetbCu6f5QQbzXPRorKe9BqTf6IyBAAAAWkGao0nhDyZTAhP//fEAE24g4NqSIAAtQFxMX/ttv3eEHLms49IP+RKovi6VK6R0rSDv/CfbX+FdD7mJcceMTpjEg1joVRvtRelEkRJYUSAUN3S2Ben3PJDb6gAAAFpBnsFFETx/AcW4k5XkCliEuvcupAACSRyhlqo2MUH8mUDvfbtmjhtnBqevHwGCJxnv14ek3FfjggkTWj2g3isNRuta/B6KGKRsq5ry1eCG3NtWadMXdor8SUQAAAAqAZ7iakf/AcV+lNKyEAeqmU3Fnozv0CAgAIZ1zDFduTyGLGlk+AXyp7BBAAAAOEGa5EmoQWiZTAhP//3xABNObP/Zf0mccgBarC/lGTLYPoWFgTN/COaQsqnvfDcbuAPUH1Fw9zWBAAAAcUGbBUnhClJlMCE//fEAIMjr+c2OFQoZmrjMlvvjABOOWnZJ3F5frrD8zFBVssH7bQX6ulbgfolMWtW9S7jMFeNmqNJztzMo868+ovlcm7rGsGKXd/tX+O3YZTUNSDU4vqU/nBzhTAft9OiJyeSELe1HAAAAMkGbJknhDomUwIT//fEAE05s7z7oq9/QAtb46mP/Utkv5U7bn69LbrbLltYi5QDH/wZwAAAAT0GbR0nhDyZTAhP//fEAIMjr+c2OFQoVADUuG1gBMud+oqFzD4Y3XmsjrU61srQdeH+OSl+65BgR2GVkm9sZ35pY3dqUTndH8CTHqxiXkvAAAAAuQZtoSeEPJlMCE//98QATTm0B1MSAC4mRCm/Yrcl+z1o4Q8qWmcMwtf6O44vkDQAAAGVBm4lJ4Q8mUwIV//44QA1tmNhCHFbPQZ8DHPSXXdZ0ADgJxyuYiJ/H+Sm4S+ruy2kLba0R9txLQArGkEeyaTjLkcKq9Vjg2/weJZV4iIj9d4yEOF7Jtd5vFPtjlyzkyz6C5XCXgAAAADVBm6pJ4Q8mUwIV//44QAe/RXnjhqACZ3kqKXx22mXEsj82YVO69Xc7Nxkvf/Js5tqowH0LQAAAAHBBm85J4Q8mUwIT//3xABP91cIzYFwAP55Kqr9bY9GCdzwno/oG1f5E8rEuMdySAaMSi6HAp0dIAU1uQEJkEnZXY/nUXKovO0Jl3FXLcr9MYdGiMEu0FOKgb/1go+dNcdZ3qLUe3R3H8I1ZGRl01m9JAAAAV0Gf7EURPCP/AR4KOc+RSs1dVhG1lfnmOm4omSOAEI48I/CBI9jR0OTEHsv5+LR4Y2Nfo/DkhES9RdOnH8yKedAD2i8WxnAJMqDcRJ4J0+nRKeiduk0RQAAAACIBngt0R/8BxIfWFThWLY6nQna+KHzaTQABr46M2JqbwoxBAAAAJQGeDWpH/wHEyUZUb1U5q0LuS/gAnDOM7IwHE+ZZGlk2sQm66W8AAABlQZoPSahBaJlMCFf//jhADWztmL57QmfGt5tKAFrgEB4Loctbdk6btdmN5FuQcULw8rg4PPxiA/YjoJP17Rj9iHQTTn1ibMPpQertVmlXYDjh7uTFVm5an6zHQkFEJJ0LdITQCyAAAABgQZoxSeEKUmUwURLCf/3xACDGoyIlIWMm5kVpiIAHs54KCO1KtS/sfAthIagrHiOpMi2bKNoZbjXn+CQyjjjEO/hgX2S8b6RcFyZzBW1wPLyyiW3a0V6LJA12JseamfORAAAAJwGeUGpH/wHFfpTSsX3ZIlgmspyJo7cAAftb0YxWpPE3daZW7H4loAAAADRBmlJJ4Q6JlMCE//3xABPmrxXt2ttgOACWPU2cdUERID1b4I2q/F26wqZDCiwJo2Y/AXQfAAAAZkGac0nhDyZTAhX//jhADW2Y2EIcVs9HMS8FCAIACZ3XdylTdwZjedVxRu1Dcal+XzT3i+LFD/eKc6Um9XSlFa3+JLHmjAraRf72JfbNEVv8/OxDPKhLR/FDto21V2L0knGsefZsgQAAAClBmpRJ4Q8mUwIV//44QAfrRXOHrUtKiE2UQAXP+A8FLugIUtaRBqVroAAAAF9BmrdJ4Q8mUwIV//44QAfpmv85qgABDDmai4WHali0Rz9h8MJB+8b7JOLEVppJw7r/fcEnNjywWiCRdObTETc29QlNhrhhuPsJ+7sCJEqJjFScPNPJKFXb4rSb9i/d8gAAACFBntVFETx/AcW4k5XkClkwqsDHgAC26uo/tAnvKViurZMAAABHAZ72akf/AcV+lNKyD+mm+AAvqO1C/UAB+n67CPTjYc9UWsZo6Ssz7tE1HGWMJ+5Lg1mZ1y8vgMGkLylJseloUIl3Q5Ol6hwAAAAoQZr4SahBaJlMCF///oywAhAXwDt0S5IIeABOsdNpSWfmXyO3/3GfwQAAAGBBmxxJ4QpSZTAhf/6MsAITxv8FXP0AF6bnv20e2oqnEoi8E1u4BHgOKn966135KXccum8HSp4u2iL6TB959Ldeu4WZje2/w4+83/IY+kmpTPqNBabUAGwkFGTeweSFUcQAAABbQZ86RTRMI/8BHgo5z5FKpX+zHkACAmCZpn0HEVQFuoL4T1yAS2o5yRqFhPOc7lLMgvW683b7+fYLG1pW+kKeEYm1trbrqRscl7V6MYPp/VrgUw3vH0aHNyXq3wAAAB4Bn1l0R/8BxIfWFThXZvY7HCnG8nVMAEJlWaCN+McAAAAlAZ9bakf/AcTJRlRvVSwoatbDBqAB9N9KVe080XP1BQ1WBLK0NQAAAF9Bm0BJqEFomUwIV//+OEAH93/ojU4wUQ1J3QADsYnF7I5g5roX0/ar+dPquIVCN+QxOPL1TOY8zmfQwiTPeYFSTtZPyYyPZaVunT0b7j1Xk58LGpTBVAlnVjvxAl9exQAAAFNBn35FESwj/wEeKbPBye0a73Oa+UiVQQALi4nilpgrHzDkODLoSTK9T7fjMJ5ROqlYeVQ/C2V2ygscMV4djpmQyWF+u30/ImKlRKq4w6wgMmq3gAAAACMBn510R/8BxIfWFThYR5cbmbqAB9+BWAhwzquOOCiPbMj38AAAABwBn59qR/8BxMlGVG9VLCh8HH+yewANnrLold9RAAAAYkGbg0moQWyZTAhX//44QAe9wzwOTYfIAkAHG0JV/XTrDcpv2H5D+58jsmEraSffbboNFpX0UWhxLBF1+1C3q4XSOmH1z0SovHBtneaWo6hBV4kcG24r+Eggvbgb0T9U/yBgAAAASEGfoUUVLH8Bxe7duqYXjUAwk9s6UpfV8AE6X6IIIqxLMhRhFcnOkSpqAg1rOCJONw8LMHdYCtKMO5SnDcpL71IE/ft5w+/rBAAAAB4Bn8JqR/8BxX6U0rIQDBAUr9TfgBCZWEwOc1eIyoEAAAAmQZvESahBbJlMCFf//jhAB79KWyoReQAcm6Ljp+Ja9w97mwb3UDEAAABQQZvoSeEKUmUwIV/+OEAHy3/vhQAbUk9aFvjbodrs3pagKCuPeGOIhRf0uh7cGFvgxyvrApidAScVPAnEBYK3xdUU7rPxdfAxMz/+WzjBuQMAAABVQZ4GRTRMI/8BHgo5z5FKo/Mi/oNFSzCvfgAhpvSDkEEQhF6QCTWdaFRNL+Gc43uTHK2h8Tr+jYpvgVJZfVXUT7ESwpreVAYyKSmHnySAjKYtC7+SUAAAAB8BniV0R/8BxIfWFThTZ757WEF1SACHyrNBIk2mHsOoAAAAIAGeJ2pH/wHEyUZUbzcBAqxg5JPJgAaximmTBBQKGZHJAAAAdEGaKUmoQWiZTAhX//44QA1s7Zi+e0JnTonjfABXGRrFeOusq9dL/pj/2kP98fGo8nDTPNCN8tZ8fAZK0BYeGV9uq0DUYDk2oVlEz5wkSs75Jzbww5q1+eiuudzHz8+POJhSYSkKMc9u6poV2PknVfmaPA+AAAAAakGaTUnhClJlMCFf/jhAB78WBHgAPxOCRFAJCtaA4TX3N+RHeUJwCJhos1HrHk+4T/IKMTcrJTttTN7ndL6eN+2pytpAWauGqiO/rkQr01HQohVjEo7ZYiYVXeMOSqMyNj1aa0dusrJojIAAAABYQZ5rRTRMI/8BHimzwcntVE7HqLm14gATORbK65K2Y13+W2Joj1Twu4J25Em47utRwpKl1bsRo2Vl4svt+xInUxuxNF+hJrFE0lcKGPoJtO3/boq1WGLy4QAAAB0Bnop0R/8Bxa+KQwqnFAEKcVEFEACGdcPakJiRgAAAACIBnoxqR/8BxX6U0rIOePLi4HLteqABOpUFTXyANT0yPAmlAAAAZUGaj0moQWiZTBTwr/44QA1s7Zi+e0JnL7IYNMZUoNrppACFPOBpaYBA31lpkD2ITStgyKQeHbHM9CVkoHLEdMaQ3JQ4vlLAp1hWQc4Ftc8oJGTRGxgLStVJ7jJRzX9k9rCW4KzhAAAAJAGermpH/wHFfpTSsWdnN1C//3/6fgAmmE97Aygob0ypIEvSoAAAAFdBmrFJ4QpSZTBSwn/98QAgxqMiJSFjIO/66KSG5Bboj2UAJLqhxB+8wwye09st00Jwkk6GD0ed2cR/fgeJ91hNOh1uZLtSf6jTwEFT3jK6DYwYIEyMm+0AAAAfAZ7Qakf/AcV+lNKxfdfaSFIeq6JrTWAADZ60BYrcQAAAACJBmtJJ4Q6JlMCFf/44QAeTSllbOcqbQACGh9ZWPI5BuwOhAAAAZEGa80nhDyZTAhX//jhADW2Y2EIcVs8+HxC9ScKT+riAEBn9WlcRhCzhtpZ3RJpwiJSrybbv5aUNJ7g2S5SYmhJuibTrxAqJ31aq7MJSmKDdfHpW0GhGzXq95H+5UlAtfraBZ+0AAAAiQZsUSeEPJlMCF//+jLAB8u44+ZpzAAaKq7tnIbybiA1OQAAAAFRBmzhJ4Q8mUwIX//6MsAH0LCla+U3cAGPkMXResMtyRe+UHnIgzbw1IFylt7v4HEbglM1h5ym+ivCwSaBubPKtaoZ/IhEI3KPVfjrQ3uC7Yko/6coAAABPQZ9WRRE8I/8BHgo5z5FKpX0HGlfzq46hG8CYANpVp4p6xC/PiuAzT53YrKicMa/vGBW9EhMEoyWnlUiQ1qL9DHLTh2kuHA7WhuRHgOUsZwAAAB4Bn3V0R/8BxIfWFThOiJtlAeuXScAEPlWqcb9dv4AAAAAdAZ93akf/AcTJRlRvHQJk+rwhOACHyrPdkFH0lysAAABeQZt8SahBaJlMCF///oywAfM+w7ecAHKiox7VOLrUSkT7oJlgup9l2DxHQTPzVJbgKTQFUfkqKI6EtnPflGaDE6J/DeXNNWOo3ltSihgJd6MikMLBXU3mguS7bdFUgwAAAGRBn5pFESwj/wEeKbPBye0aodjHCIANfLO/cicQzjtBCHAchdtfKkQQoDv5kou7qrJ2yEBG7QXt/Uoq7GguS7n5lELQ9UdP9WqpajuQc72UzYSaHBA53S6y2D1krA46EPJ+vqdBAAAAHgGfuXRH/wHEh9YVOE0UqPYWQqRsv1AAh+K4Vb/LwQAAACUBn7tqR/8BxMlGVG8dAfkJP4+yiYAJpKs0EiTcJ8lMkua67yvhAAAAYEGboEmoQWyZTAhX//44QAeff+h7egfYBAwAL5numN83xvKHciSrL0/3grJ6BMGSnQwY/b1MzUjSG+QHz2Q3sSMteOMpdehFrrToh4gHO/e4PEls4wcA3uanE9b1wduvhwAAAFFBn95FFSwj/wEeKbPBye0aZpLC4rkEAC4qebz1ZXJ/p9SIggcNzZAuibhDIG6uq2accz2CsgcDM4UwaElhjNEGu/BjSoqhIA6pwwJjw/WvNToAAAAeAZ/9dEf/AcSH1hU4TyfNEHnxjeraPYAGz1l0SvTQAAAAHQGf/2pH/wHEyUZUbxjp1HwVeb9M9gAbPWXRK9NBAAAAYUGb40moQWyZTAhX//44QAdlwzwOTYfIAkAHG2hyvvtrZgoHfr6+zr6fiEqWTwIgUkeXG0n5AeInPoDyNg+hPVILGKeueiVKsauB4tsf/1xX5fdXZNhBBaWj8rSMFw//RKAAAABHQZ4BRRUsfwHF7t26pheL8fzegzfdGr/UiACcmwJiPJngj+ZdFTIv4KW9PJlKwlBzJDreuXDkTTCcRTi1RefcpTwTWbJz/bEAAAAfAZ4iakf/AcV+lNKyDmA0MReNxuOAEJlYTA5zU4nYQQAAADZBmiRJqEFsmUwIV//+OEAHZ0pTZpDWBcuABdbyVnR/xh/oLCKQPRKHwP+WcJew7E67yHP9niEAAABZQZpISeEKUmUwIV/+OEAHc3/vhQAqzULiL2hMIguQl3RXNvzSduNLqo4S+AnKaUN+TQLJh/MY6x5c/kS/JtYhJrcRN0/hXNJYID98V9bxPYDdPgQRVJNzolEAAABRQZ5mRTRMI/8BHgo5z5FKo+g+Zu8CYAQcK+DFv3HaB0OBO95sWeaxOJ/y/kUMpxiKiIMqFIwGls3DqwcoxQZeKv8quwVurvjlZyqd9XVXs+nQAAAAJgGehXRH/wHEh9YVOE7GEUIJb44AQXgzrdcG6xUfHCgjXCz29PqDAAAAIAGeh2pH/wHEyUZUbx2obV1hdklzjgBBBmaZMCbGIsgNAAAAFkGai0moQWiZTAhP//3xABJnGYSgoGAAAAAVQZ6pRREsfwHF7t26pheNOr9SfkuAAAAAHgGeympH/wHFfpTSsgwWlPyfOeTAA1jFNMmBNjET9QAAAC9BmsxJqEFsmUwIT//98QASTm0B1MSACccLomKrGJcg/BkyqWUjIaNJy/MWMv/kTAAAAGNBmu1J4QpSZTAhX/44QA1tmNhCHFbPO/N0wqn2GlgAO0O5Kz5MH2rthwq1XEIM6Wh1oB+/uSodUDLW/v56grwHafRkPEcAP9jZzzhd/HCJP5kOnts1b/btHh/fwVAJc2oPNcEAAAA0QZsOSeEOiZTAhX/+OEAHZ0V544agAhGhKzWPmAqGzStB7IXoWIipNvT/clkYNzF+iq/RKQAAAF5BmzFJ4Q8mUwIV//44QAdvOOMyr+cAAupJu6eZXODN8WPssS6DtR2wWUi/kEDpUwdstB+PuEd9+s+TWkjnTdFZ+keepViF0Xqqa1lgsPok3q6l+u+YLUsSJAub/bfAAAAAUEGfT0URPH8BxbiTleQIh3+N6SMyrxU4e+VTcAATUy0XsyWTisogHvB5v4WybeSxuXwNlkwJvrwnvmr6yltHZo/GvlAgo4bitN65DUC6jXmfAAAAHAGfcGpH/wHFfpTSsgwWliCcIAIJ2rrbondLdBQAAABxQZtzSahBaJlMFPCv/jhADWztmL57Qma8PyNaUANtXJPP1u2Qv3PEdsQJOa7cW8eybtdIKW3wdvluzSTme//c1XVDtZnDg1oMDTvVAouxkGVzeUs26n2JMOfpjRhIjCBnahdquaXykuWO89/nmgSEwkEAAAAeAZ+Sakf/AcV+lNKxZ18snvNxJTDs1gAhMqzQSajBAAAAZkGbl0nhClJlMCFf/jhAB5TI9n+sAEztX1YNIPRgjbDfnqbmxqpkvvejSrae7OC6g7Yw9d+UsIbdAm1fcQ2DuA6vRtE5y+IOp/UemvsHNE8E7CZMOJbjy5GGfKldigyDXDUU5PpVUAAAAE9Bn7VFNEwj/wEeKbPBye1UImx5IAE4N6YtQenKGV/9TcsvgN9JN+6zxowgevzZK9mDIz5EI01bn6Han7k166PjYI69AgTIuIJJ0O2zGldAAAAAJQGf1HRH/wHFr4pDCp6RHmgDkVCACZPV6x+mq5sDPvBfJPzxO4EAAAAnAZ/Wakf/AcV+lNKyDUaO3fjbqAB9OKwBy5v6J/XegyXe9USQHFq8AAAAYkGb2UmoQWiZTBTwn/3xACDGoyIlIWMa8n80AAK6EIkM1nELNa2LWvpEF1rl+JYHI6SihHXSTKJ16A1ERTvldXq8HkPFkTxEpx4hdXb0avYOxI96Dzuv9PJvg9R/0C/qBo9hAAAAIQGf+GpH/wHFfpTSsWdnRzjywHpB584ZBgAh8qzQRWVlwAAAACdBm/pJ4QpSZTAhP/3xABLObQXRG4AAmldV8CYZGJjfMJCreJjyYWEAAABoQZobSeEOiZTAhP/98QAgyOv5zY4VCfEOEGv2YAAWyUzOcnAS6XDW4OFeeC+gdn2G9mM0i/lUCqwpybZB79Pdqgdg+XiZBBUgW35S6lz1FPozj586GL3pbjKrUm9Q75m8Mws6dEAA+fsAAAArQZo8SeEPJlMCFf/+OEAHk0Vzh62Y2XlABOrdC4rD3Z5S6/4QNnDnrtwjlQAAAFZBml1J4Q8mUwIV//44QA1tmNhCHFbPPh8DHPSVGOlIAIbrJoJQ8omJ8UpB6nO7/8EqNRTunp5ShR/RiDhB7rGeZL05J7Zga9bZDK2pIiGp09uXg4ss1QAAAFdBmmFJ4Q8mUwIV//44QAecm9NqJZgABzTDzIPcDaGmB48CaoPq7URR0pwFwWiugNetIXkWfPFP+4BeIMRZrUPgouDENWT8mVZPn2KyfoQlroCnpJRX5CwAAABQQZ6fRRE8I/8BHimzwcnuIZ41araBUUaGnCgv0wAaj/Jqe7TnZ8i0wyH3RhVUIQnsiPls/t3H6sWKSEFwe+LHgdwoKF/xTyAtQgyF+0Z70cgAAAAbAZ6+dEf/AcWvikMKphO+bvwRoYAANnrLola3AAAAHQGeoGpH/wHFfpTSsg6TDuuHmwKwAAbPWXguLMuAAAAAKkGaokmoQWiZTAhX//44QAfHiSaG0SBS2ch5ADczuBeEx1NeNxyJY52DwAAAAG5BmsZJ4QpSZTAhX/44QAfLVXBm/yIQAcOKhuD+f2MgjRNtqcPbgpMcEpI1ZKzy0w1iX5A8Pd3UQCWcnKJll26oBcdxA8MBF9V4nsDErSJRx9/akPlqnTqFCD0pmVd8tC/tBIflMYvHzCxvwvJGQQAAAFhBnuRFNEwj/wEeCjnPkUqj82Q35gzLfVAAfL7oIl5qo9AliXBGSfPji+W1hg0hHwAw6S3EhyFZr+BtDIcdfJWgFxO4/lI1Ea/KKU1Fh13s1783RtMuE4+vAAAAIQGfA3RH/wHEh9YVOFNozJ4CgIAE0wnvYFzjjgoqSBLsUQAAACEBnwVqR/8BxMlGVG83CzriWujBAAnUrCYDmH1r0xOKLKAAAABrQZsJSahBaJlMCE///fEAE26JzdwAzWCJ6Vdo6ibHrKX4456vcPKAjmgRa1mycppQ35NAsmH8xjrHlz+RL8bNu5meVX4f+PbWJCurLeX5ECCCzjUX6BbekwKXCIsudsdYm6TGpVGAifoMXeQAAABQQZ8nRREsfwHF7t26pheNRvhcaaAAd0LAOfcYKy1Z4MVipUt7IK52z3F25BRkZirUIFdwDG3/3GPs7Zb7Btu4c6TJToqlIXET2fKOEIiiKVEAAAAeAZ9Iakf/AcV+lNKyDh0p2ahawjcwgAhMqzQQ7mHQAAAAQkGbSkmoQWyZTAhP//3xABNObO8+6Kvf0ALW+PEJS8Kcax+H8XmEZU1cDbKtjQZGYr4EqSF9OBx3dtnnMOXz7J27kAAAAGBBm2tJ4QpSZTAhP/3xACDI6/nNjhUKFy0jliAB+IBg/53aR0I+jxI3Xc340KknYr669Q9CBcd6MtU1CH4km+m7R9rkN7Elg8FVNUN7I5hzhH6PA5Kl4Hv9VanTwm3/z3kAAAAyQZuMSeEOiZTAhP/98QATTmzvPuir39ACZc79ZUmxiXIPWVQKvRuM7SD2ls0XK9L9zKAAAABjQZutSeEPJlMCFf/+OEANbZjYQhxWz0MzdMKp9hpYADtDuSs+TB9q7YcKtVxCDOlodaAfv7kqHVAy1v7+eoK8B2n0ZDxHAD/Y2c84XfxwiTyZDp7bNXCMhN5NBZAf6bl03JrxAAAAM0GbzknhDyZTAhX//jhAB79FeeOGoAIRoSs1j5gKhs0rQeuGv1GEgNuCcbSJ635cHhX0LQAAAFxBm/FJ4Q8mUwIV//44QAfHOOMyr+cAAupJu6eZXODN8WPssS6DtR2wWUi/kEDpUgq6Wg/GJQj2uHmAhihfpufDt7dskiX4ak+J0QS0nI13pdF+u5jEHMi/MF/2ywAAAFBBng9FETx/AcW4k5XkCIeAeCSMyrxU41eaN5AAnZlovZlLEBXdyvvvVGnl93qJRoI9sDU4JQ2yXDsGad09vZsFVgrcwrYL5EBlY6JyMBzh2QAAAB4BnjBqR/8BxX6U0rIP/6MNLjSwAEFRG60in6xfMqAAAABvQZozSahBaJlMFPCv/jhADWztmL57QmfoVSNaUANtXJPP1u2Qv3PEdsQJOa7cW8fDbv6QUtvg7fLdmknJsDgD6uRqrrW+kHxNhReqBRdjIMrm8pZn1U7Uw56xTjjLHSt8sc2zTadedi5gryz3hCtBAAAAHgGeUmpH/wHFfpTSsWdoByi7dASTDs1gAhMqzQSTrQAAAGRBmldJ4QpSZTAhX/44QAfsyPZ/rABM7V9WDSD0YI2w356m5saqZL73o0q0voxZUAO2MPXgXwHzbpcmf3ENg7gOr0bROcviDoSnkzf0/0TwTsJkw4lOIdIYQYT86qEeZJoX96VFAAAAUEGedUU0TCP/AR4ps8HJ7VRTHpv/ACZG9MWoPTlDK/+puWXwG+km/dY4kYQPX5slezBkZ8iH8LSSvB2p+5NWWvNwOdegQJdv71BYE81br4oIAAAAJgGelHRH/wHFr4pDCrDA8GOQl4JUABOHq9Y/TVc+BcZOSq6mm9uBAAAAJwGelmpH/wHFfpTSsg/xs632m6gAfTisAcub+if13oLE/eqIURzI4AAAAGhBmplJqEFomUwU8K/+OEANbO2YvntCZ/ZP43wASmmX/YMtNMo8CfjjjyVbcm0kLZHSUUI66SZROvQGoiKd8rq9Xg8hKxQStLV6SLq7ejV7B2JVn37d1/qSFom2ViYB3sNCpHGDh8PORQAAACMBnrhqR/8BxX6U0rFnZ/L/UWeY+7UP9BeIAEPlWaCFKBMgoAAAAC1BmrpJ4QpSZTAhX/44QAfrRXOHrUtP+In8wAH4rkqrChhsOUVKqkxOuUSyWukAAABUQZrdSeEOiZTAhP/98QAT6AkX4wAHwRUN6dYb9/p+U4yc9aYlwYj177yDzL4iTyUEbh2VvNmhNcRA2uNSMXnHVk96x9b80PsPWkKw0DA/AnLornH3AAAAOEGe+0URPH8BxS2gFpEt4AbS+z/V4rfqQo8v6WJDkkynqyY1pdgRzJbRPN36JtvHBLahlfQ9aaUvAAAAUwGfHGpH/wHFfpTSsg/qRM1IAF7dFjo6fA8vpEVsWv29IGNDd25nHJJ7AKIrJ768MjHiv7UawM9ZMlWXaiO+DFxjnLeuiOi/Ac4hMJ2oSNKREHJvAAAAOUGbHkmoQWiZTAhX//44QAfrSlODbnK9TwATjWobg/irHRspi3p/08cYs+taUGLbHIvsjU+bgKPxXQAAAHNBmz9J4QpSZTAhX/44QA1tmNh2RZXMAM4rD4NXobEz5uw36DmjOmMF3Dzh4tYZ1BOUbyj8ZFsfJOYBMY3XmzHH+4hxHPn5sUtZTub868SW/1zuwXH0Zia0zoRW30s+k/N8r0zYKBstq0fDD3fKaixe9myAAAAAdUGbQUnhDomUwU0TCv/+OEANbO2YvntCZ/Xb4M3J3wATO8laPMcIueQXcU/YSsScqK8pqCTbkCB8L9qE7byKJdgCUOhXp9pFdR15Q5+IAunGm4X+4FQNJgMV8RLqy5+rrYhNdAiGASCx2DHlHptO6DTmTKfgswAAACUBn2BqR/8BxX6U0rF92SJ7u5YUeieAANnrQFit+1AeBcsXZ1bwAAAAYUGbZUnhDyZTAhX//jhAB/CsozU7sAE3GaCAs3TtI9AP1a+Zy/bTsqrNuowGAiyZ/6t1NGDlZQRZk5L5ycwZmQQGqvGgG1GrzkRHUuRQykE34jSjZj5P/YdLHujcX+Hr2IAAAABiQZ+DRRE8I/8BHimzwcnuIdoHAKgASoEdC+Glq/myuogsevSMhMfpFjOAEnwkIM5ckp0HhIH5m7qqidiWyVYxZ9CSJr8ZtEDRhiX4bhuLyBYCzYk5k3HFQRsmqQNWHYU+vtEAAAAkAZ+idEf/AcWvikMKsMRleal1kFQAPpLJwJ1YTgKw5My/Ri79AAAAIQGfpGpH/wHFfpTSsg/x8QlB0QXhecqk02ABD5WEwPDbgQAAAClBm6ZJqEFomUwIV//+OEAH93/nn1YUXDVTlikOL4ACcB9ZksNX7QHCVAAAAGpBm8lJ4QpSZTAhX/44QAfLVUf2Kg1gA5w7kqJxmwYWvJ8stg85xjCvxRPgrMd3Hf9tvczw6VI2gipdd+HR2s/t2V7o11cXmV2zoe3/vqFvtejn51bS++BZMX6KgvItBWFCNkzbjVg95O2WAAAAU0Gf50U0TH8BxbiTleQH4XCIZm7T61YVAATnplBwnsvBKRvFd80/2K2PQurx//iDs3G6UWvSAuEVaV52c4zPrYD4tvBJpFWFs54eeY11OO4AfiwRAAAAFwGeCGpH/wHFfpTSsDUVrg+2vvo04oBmAAAANkGaCkmoQWiZTAhX//44QAe/SlMqMdYFy4AF1vJWjhVOL3KGvkc1GZtnbEfif8ojaaUbxnfZtgAAAGBBmi1J4QpSZTAhX/44QAfCx0qGypl0ABdbsLccCuaHzA0dbUoD4OLkQQu+vqZx1v8Rvb7oAQrihm6u0Ni9NNAdAS+4zsGUDpL52QcSlvIFizX/I5Sa1EqjNttl6DEnFlEAAABXQZ5LRTRMfwHFuJOV5AfhdjelRUrQDO3kPABOWjjas+/SJxj6gFVQ3h/J3ubbg9rq7tmrZ5bTQAWSgUSV1xlbSMxL+H+/9hKccIddWt45NL6Z1PftXjpAAAAAJgGebGpH/wHFfpTSshAMD/N8+SAAIL/wSZTLp3U1bQzntjaCU9uBAAAAV0Gab0moQWiZTBTwr/44QA1s7Zi+e0JnGATfD0lTyAD6HbTMyVlicEF2/ofy8mV5Lwx0ob7TsUlZOW5nLbOF7H0ZKibghSOB6AlRU1W7zbgpl0bSVSdFIQAAAB0Bno5qR/8BxX6U0rFnZw73SwmCgl+AANnrQFi2vwAAAGVBmpFJ4QpSZTBSwr/+OEANbO2YvntCZ04l4KEAQAEzvJWjzHCLnkF5SJSemhoI9QT1HrWMJ/iNjHcrSnNNEfmSW1MCu0vSxkB0AC0aU74k3t7ajEX/mxWSVb1c194CQZMfZ99tWQAAACABnrBqR/8BxX6U0rF92BU32xStvLsdsABCZWEwNMYOrgAAAGNBmrVJ4Q6JlMCE//3xABNN43GcACSkLwykNEMDEBj/bndFCVkaTmFizq//rYiKwIXC0A3kJkG7BaJlvoZWO2qRcFT7EFsetOnVMzMps2n300foryxGhx5Gyg2lKpoIjXDrDIEAAABbQZ7TRRU8I/8BHimzwcnuIdodL+n74AD8B5FjfV97JnUrCEsqmfvSL12ksnxfd5S43eAd2lwNaxsFgfhoLU/ZNprvUKweqJ+iZpyxbDlmjFIr9RL6EAr3+tHswQAAACgBnvJ0R/8Bxa+KQwqvj8n9rpbCACC949iy/gcq185znmbhs5gSHKawAAAAKAGe9GpH/wHFfpTSsg//ox9gmoqPzABN/ZaYju55PJ8TeMVDKePRrmwAAAAoQZr2SahBaJlMCE///fEAE26JsHtCnX8jQ0gJw8QAfcwu+nLYeiMNgQAAAGRBmxdJ4QpSZTAhP/3xACDI6/nNjhUJ8PrEP/0ikTvoAQp5b6M35xNhQTjXVUztD2sGajY/3IyLcllbDe0MAed2v3MTlv1sUE+/VtsHY2Qjn/D4gISMPjbfgI2nl3UlyLpmVV94AAAASUGbOUnhDomUwU0TCP/94QA0cKH/1mOE+DeZcf5Q5tQAAVHKLqi22HGGwdjmyMjuWOGQ7nGvhzHHn/NvcS/Qra3/r+pvgU8ConcAAAAcAZ9Yakf/AcV+lNKxfdFX7mVumUAAhnk0MnBo2gAABvtliIQAJ//+9bF8Cmrp6ooM5cfAxfyZgCuLpW1hO9dchV2OwJ65JkESWiOLgzRSekxKtrnXSmAHJQ2qJLLKD6pnvDWMKp6saVk0H/PXJl8EmlYvnbfwriRcSYQ7rJsdOSf35CrYiQShTx9JwGoT57MbwCxd272toIUGJViTvB31Dm4u0ZHPDweAKdHd3YRgoFdi35WM4cHT5ajk+lPdYO58DkPAONzL0kW+sbikJDxf8x5Fv/Nt5htb3AE3e26v1PVU7mW0+Omj21qcSZ8V6U+YksBG6Qn9dRle3JAExrr8T1/t/Q4Xs5rEleNeuxZtYa3+zoPyXLSUydWDalcGm3dwOYXTVuiVX8Pb7yeKQQ+A9wmR7W8neXz1k8fxLLmg+JMAr2O4pgNpp7to19xzOLhAAEFF8ZPRJWbz5gJm5sYskw9ZznQBq62o0CMFk9KbJNEneJFH0vok2IOqprdHQZvbmcaCkU+E30rQAJVvnGoNn2WrTql4m7Xobl4Hfkl/foB7Uer9O1qYXXacm4VJygS1P6myF72ZCanQeJalXu5TalxP+83QOCqnVMTMgr92Jf/MuVSLCDI2M6IAbG1AVoswSP0BpWQSZsYX9egd0aZY7WYPCE/F1XhdBwG4kcgn4tWNdlYjL68EfI8fBzAS1MP3D98m2Ca+ibFPAjcn7stSRS8cdQudxUWVJG6SDyaF6wRlBD1WdpjDg2Uc9ve6lZPsxxH5tTBSOsDGqi3lNcM27wUDV+/cl21leKvwAMp1QBLeOwWCCbMqWVcLcMQwjzm0uO9ZTVVc3q1DMfVRPgIyxOFr5zAmP8T6NG1YtfL4IOjX5+0fLQAKPk2Dg1hWYwUqiERW2q1UBrBDLFs2dulFEV492x3hyyVRGltD5PEokN7N41gnY3pkaG8xcj5/vCNjJg5ISk765U/v9TZrVE2rFtxMKlnUnmUvO2iktfqdJHyzq94jnoURoZKq9aKyV7X4ufp0TCmsEEHAlt8WCFeDBrnVizJNoS9l1tj+le6ZD3l6w7dVpb00iQqs9qP+yRVKAXoh8hFMRMPdjjXRHE6uLkW8E2SJNydP6UcxAGOlXz/dMuxrZkVd9mnJtkuHaeUozHS8Zdr1rYGlyvQPOgwOxyx3kmf/MyFkiGEYuoxv2XzthmPsUK1ey0AIFMaAJVDjtRTfmS3+vzxLhljWec60lOg4qKvlw409WbMON475xGXdUaDEk//Ym9K5C6/cGIzmvj+fKKpkmVJS2FIbFI7bP4EEBXolaX3RuoCFm4i8/8vT/3l1Zk4hjNbb0WE9PSYKRy/E7hQ6ua/DQvDpgS935Bg7RTsdDfBlkl+laGMT9odusI6eKSkSDarJ/VqBS7lNFN4lpQEcZyS4lcbv8B5SeYkYoyjYXgw2Addfnv3fLGQlMZOcAjaS8SpBvY9z17bketZ754h2+V62H4RTQD9ixwD6LplEJlE2S+WBE3EsVSnTfognFMNz+OeUXoNixhMJ8PW9/Eso7A8CEq8HWCnESxtNxhTOvgn4062SpStDxrL88GDe/avgnLxWWcZG7CTxgoHGP2a/JkWKxIYSKUUc0lAs0GCNiXi6raH03wIHN7PJKwKW8mDxzgFlhYsIJlCkeigCJMB5ZO78MP8P6hKs82g75nIo5FEzJl2uOaNB5nhV7HII7Q8lOKB0CO6GM1/jsO56DbwBLqtxErnsK4D4U5t9WcRp+LirkGBnfqTc2mrNS6q4k/rabceNNQpbq5c8sHnkzVy1O4ZydR+I3phGuf58AE+gAGKJVD7zFEwby2S0K8lKrLh/CgeBgxdDNSTJhtVGRZb5IRZrIGn47kv1z+oCn+1GTXCrjBwUXaqhk9z8yUVhJm/nBeizOgLwbSBhKHEyXWWmylZWiPKYFH9Af2f5LzacdmQ2ppHRcgn7r3TdAj5aEgCCKhHLdrOmtWFD3ecUxHQP2REIAIqYvNjmNYJKYoK6ivS+flrroyJpYKpxaoMbazggcNI+2f9mzBwEwKNOuxxVlumYXMXCNACJ3MQGD+40aN5stZC7n0lALwWMKw4qGGG7Zo7dY1JExqOltjFsbNNUtez9qyxg8pznkRxvaCyLTwipcpVEVvy7DDst3t3QuwzG8eQLSwSgQIR5nMu6aRLVAi/U3yNBuB6CtLFKP6gRjvQtENInJHuusqZdKThGqCLUDEZLvhOQekpR8cF2iYsdaW/oZAkcGPw3LSCx+68LF1FZ82I9RPF0F1irHKNeeJDujYt8KqNFLmUizmyqxV0THFot6bLAxYEYgKEPQrPOZKZnTR8nXiNMADNhRzQSV3DYADp4B6/xAlAB5sNSI+FKo4yJs1Lh01ZgA6/25+xeR+TYMcu+bd8w8YJCA3k/MtFD2wLqdwAAZHZtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAACi1AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAABjoHRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAEAAAAAAACi1AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAoAAAANIAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAotQAAAIAAAEAAAAAYxhtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAADwAAAnFAFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAGLDbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAABig3N0YmwAAACXc3RzZAAAAAAAAAABAAAAh2F2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAoADSAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAxYXZjQwFkAA3/4QAYZ2QADazZQod+IhAAAAMAEAAAB4DxQplgAQAGaOvjyyLAAAAAGHN0dHMAAAAAAAAAAQAACcUAAAEAAAAAPHN0c3MAAAAAAAAACwAAAAEAAAD7AAAB9QAAAu8AAAPpAAAE4wAABd0AAAbXAAAH0QAACMsAAAnFAAA6OGN0dHMAAAAAAAAHRQAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAFAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAMAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAIAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAFAAACAAAAAAEAAAQAAAAAAgAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAABQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABgAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAcAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAACAAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAFAAACAAAAAAEAAAQAAAAAAgAAAQAAAAAEAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAcAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABAAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAUAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAAHAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAMAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAAFAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAACAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAcAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAADAAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABgAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAMAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAABwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAkAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAAGAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAIAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAAAwAAAAABAAABAAAAAAIAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABAAAAgAAAAABAAAEAAAAAAIAAAEAAAAABAAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAABQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAYAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABAAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAgAAAQAAAAAHAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAUAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAAHAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAwAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAUAAAIAAAAAAQAABAAAAAACAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAABQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABgAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAwAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAACAAACAAAAAAEAAAQAAAAAAgAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAHAAACAAAAAAEAAAQAAAAAAgAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABgAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAkAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAAJAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAACAAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAEAAACAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABAAAAAACAAABAAAAAAEAAAMAAAAAAQAAAQAAAAACAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAFAAACAAAAAAEAAAQAAAAAAgAAAQAAAAAEAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAcAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAAGAAACAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAcAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAADAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABAAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAgAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAABAAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAQAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAAFAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAADAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAABwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAAAwAAAAABAAABAAAAAAMAAAIAAAAAAQAABAAAAAACAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAABAAACAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAAAwAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAQAAAAAAgAAAQAAAAADAAACAAAAAAEAAAQAAAAAAgAAAQAAAAABAAADAAAAAAEAAAEAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAADAAAAAAEAAAEAAAAABAAAAgAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABQAAAAABAAACAAAAAAEAAAAAAAAAAQAAAQAAAAABAAAEAAAAAAIAAAEAAAAABQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAABAAAAAAIAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAUAAAAAAQAAAgAAAAABAAAAAAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAEAAAAAAQAAAwAAAAABAAABAAAAAAEAAAMAAAAAAQAAAQAAAAABAAAFAAAAAAEAAAIAAAAAAQAAAAAAAAABAAABAAAAAAIAAAIAAAAAAQAAAwAAAAABAAABAAAAAAEAAAIAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAnFAAAAAQAAJyhzdHN6AAAAAAAAAAAAAAnFAAAL8QAAAQ8AAABvAAAALwAAAFAAAADyAAAAhwAAAC0AAABTAAAAZQAAAEAAAAEMAAAAiQAAAFcAAAAxAAAAfwAAAMsAAACzAAAAYQAAAE8AAAB9AAAAgwAAAFQAAABOAAABFAAAAK8AAABgAAAAWAAAAP8AAACyAAAAXQAAAGUAAAC7AAAAPAAAAM8AAAAxAAAAXAAAACsAAAAcAAAApgAAACcAAACKAAAAfgAAADsAAADBAAAAHgAAAEAAAAA2AAAAHAAAADYAAAAdAAAANQAAABwAAAA1AAAAHAAAADUAAAAcAAAANQAAAQsAAABhAAAA3AAAAFcAAAB1AAAAMgAAAGcAAACZAAAAlAAAAEYAAADeAAAAYwAAAFYAAAA1AAAASgAAACgAAABsAAAArAAAAFQAAACIAAAAdQAAANUAAABxAAAALAAAAKgAAABXAAAA9AAAAGcAAABRAAAALgAAAHcAAAB8AAAAUgAAAE4AAAEGAAAAgAAAAEEAAABTAAAAzAAAAEkAAABpAAAARgAAAHAAAABTAAAAUwAAAFQAAAB3AAAAVQAAAHIAAABPAAAAXwAAAE0AAABiAAAAXAAAAFYAAABPAAAAcAAAAE4AAABwAAAAUwAAAFIAAABUAAAAXQAAAE4AAAAkAAAAZAAAACwAAABHAAAAKwAAAHMAAABJAAAAIgAAADsAAABzAAAAZAAAAFUAAAAqAAAAIgAAAHMAAAAhAAAAYQAAACAAAABrAAAAXAAAAB8AAAAhAAAAXAAAAFsAAAAoAAAAKQAAAF8AAABJAAAAIQAAAB8AAAA3AAAAaQAAADIAAABVAAAAUAAAACEAAAAkAAAAcAAAAEgAAAAhAAAAOQAAAHMAAABnAAAAVAAAACkAAAAiAAAAcQAAACUAAABkAAAAIgAAAGYAAAAqAAAAJAAAABQAAAA0AAAAFgAAADAAAABmAAAAWwAAACAAAAAyAAAAZQAAAHwAAABcAAAAJQAAACkAAABBAAAAbQAAACsAAABsAAAALwAAAHIAAAAxAAAAVAAAAC4AAABnAAAAOQAAAFsAAABqAAAAUwAAACEAAAAtAAAAeAAAACkAAAA8AAAAfQAAAGgAAAAoAAAAQAAAAGcAAABSAAAALwAAADsAAABrAAAAcgAAAFwAAAAmAAAAKgAAADsAAABtAAAAKQAAAG0AAAA2AAAATgAAACYAAABNAAAAMwAAAHIAAAA4AAAAZwAAAEwAAAAiAAAAKgAAAG8AAAB0AAAAIQAAACUAAABuAAAANAAAAGYAAABZAAAAIgAAAB8AAABsAAAAaQAAAF8AAAAhAAAAKAAACkIAAACiAAAAgQAAACMAAABEAAAAfAAAAE4AAAArAAAAKAAAAHcAAABdAAAAJQAAACcAAABrAAAAUQAAACUAAAAvAAAAbAAAAHEAAAAkAAAAJgAAAHUAAAA2AAAAagAAAFcAAAAjAAAAIQAAABwAAAAlAAAAFgAAADEAAABgAAAAMwAAAGQAAAA/AAAAggAAAFEAAAAjAAAAOgAAAF0AAAA5AAAAfAAAAFgAAAAoAAAAbwAAACIAAABoAAAAJgAAADIAAABeAAAAPQAAAGgAAAAsAAAAcwAAAG4AAAArAAAAPAAAAGYAAABRAAAAIgAAACAAAABzAAAAKwAAAF8AAAAyAAAAZAAAAD8AAAB9AAAATwAAACIAAAA/AAAAXgAAADgAAABvAAAAWQAAACQAAABTAAAAJgAAACMAAABMAAAAMQAAAGwAAABWAAAAIgAAACkAAABcAAAAWQAAACoAAAAmAAAAbAAAACgAAABmAAAAJwAAAG0AAABcAAAAIwAAACAAAABvAAAASgAAACIAAABmAAAAJwAAAEEAAAB0AAAAbgAAACIAAAA0AAAAZgAAADIAAABiAAAAUAAAACoAAAAhAAAAbQAAAFkAAAAkAAAAKQAAAFwAAABaAAAAKwAAACUAAABuAAAAJAAAAGkAAAApAAAAbwAAAFgAAAAkAAAAIQAAABkAAAAWAAAAIAAAACkAAABfAAAAZAAAACQAAABjAAAAIQAAAHgAAAAlAAAAaQAAAC4AAAB5AAAAJwAAAC8AAABWAAAAJwAAAGQAAAA3AAAAUwAAADIAAABdAAAAVAAAACAAAAA9AAAAfAAAAPgAAABWAAAAJQAAAEgAAABsAAAAXQAAADsAAAA7AAAAaQAAAD8AAABfAAAAPQAAAGMAAAA5AAAAcwAAAEAAAABqAAAARAAAAHIAAABCAAAAbgAAADwAAABWAAAAJwAAADkAAABdAAAAPgAAAEEAAAB0AAAAVgAAADQAAABEAAAAbAAAAEgAAABGAAAAPAAAAGYAAAA6AAAAcQAAAD0AAABvAAAAUAAAAEEAAAA+AAAAcgAAAD8AAABmAAAAQAAAAGQAAABVAAAAQgAAAD0AAAByAAAAPwAAAF4AAABVAAAARAAAADwAAAB+AAAAPwAAAHIAAABaAAAANQAAAEQAAABsAAAARgAAAEUAAAA9AAAAYQAAADwAAAAyAAAAcAAAADoAAABkAAAALQAAABcAAAAXAAAAIAAAAGgAAAAlAAAAMgAAAHIAAAA1AAAAdAAAAEoAAAAiAAAALwAAAHAAAABVAAAAHAAAAGoAAAAoAAAAKgAAAFwAAAoVAAAAiAAAADgAAABsAAAAPAAAAG0AAACDAAAAJgAAAGcAAABTAAAAIwAAACkAAAA9AAAAZQAAACgAAABhAAAAbgAAACcAAAAyAAAAcgAAAC0AAAByAAAASAAAACEAAAAsAAAAcgAAAFUAAAAcAAAAaAAAACcAAAAqAAAAYgAAAC8AAAAmAAAASgAAACEAAAB9AAAAWgAAACcAAAAaAAAAPQAAAHcAAAA6AAAAXQAAACoAAABpAAAAUwAAACYAAAA2AAAAbAAAAEEAAABqAAAAfQAAACcAAABvAAAAUAAAACQAAAAlAAAAOAAAAGEAAAAlAAAAZwAAADAAAABdAAAAOgAAAGkAAABNAAAAIgAAACQAAABuAAAATwAAACcAAAAiAAAAdQAAAC0AAABdAAAAJQAAAGoAAABNAAAAJgAAAC8AAABtAAAAGAAAAC0AAAAUAAAAFgAAACsAAABiAAAAMQAAAHwAAABPAAAAIAAAACMAAACDAAAAQAAAAFYAAABdAAAAVgAAACcAAAAkAAAAZgAAACAAAAA3AAAAXwAAACwAAAB1AAAAPwAAAGcAAAB0AAAALAAAAH4AAABTAAAAKgAAAC0AAABFAAAAagAAACkAAABnAAAAXgAAACEAAAAkAAAAeQAAAFgAAAAhAAAAJgAAAHgAAAA7AAAAWAAAAF0AAABZAAAAKAAAACUAAABoAAAAIQAAADQAAABKAAAAKQAAAH0AAAA9AAAAagAAAE8AAAArAAAAJgAAAHMAAAAuAAAAbQAAAC4AAABsAAAARQAAACkAAAA2AAAAYAAAAGsAAABWAAAAIgAAACkAAAA8AAAAdwAAAHAAAABWAAAAJAAAACMAAAAnAAAAZQAAAFUAAAAlAAAAIgAAAHcAAAAtAAAAcAAAAD4AAABpAAAATAAAACsAAAAnAAAAbAAAAD4AAABpAAAAMQAAAGcAAABJAAAALAAAACoAAABxAAAAHwAAACoAAAAWAAAAFwAAACsAAABVAAAAMgAAAGgAAAAwAAAAggAAAFgAAAAkAAAAGgAAAHIAAABmAAAAKgAAAD8AAABsAAAAJwAAAGoAAABXAAAAIgAAACEAAABiAAAAUAAAACAAAAAfAAAAawAAAG4AAAAmAAAAOAAAAFwAAABYAAAAKQAAADwAAABzAAAANQAAAFMAAAAyAAAAaQAAADkAAAB0AAAAWQAAACIAAAApAAAAZAAAAGUAAAAsAAAANwAAAG8AAAAuAAAAYAAAACkAAABIAAAALAAAAGQAAABfAAAAIwAAACkAAABlAAAAVQAAACcAAAAhAAAAZgAAAE8AAAAjAAAKLAAAAHwAAABsAAAAKgAAACQAAACLAAAAcgAAAFsAAAAhAAAAJwAAAGkAAAApAAAAWwAAACAAAAAlAAAAagAAACkAAABhAAAAVQAAACQAAAAiAAAAYgAAAF4AAAAjAAAAKQAAAGUAAABVAAAAIgAAACEAAABlAAAATgAAACMAAAA7AAAAXQAAAFUAAAAhAAAAIwAAABoAAAAYAAAAIgAAADQAAABnAAAAOAAAAGIAAABTAAAAIwAAAHQAAAAiAAAAagAAAFIAAAApAAAAKwAAAGMAAAAjAAAAKQAAAHIAAAAzAAAAXgAAAFgAAABSAAAAHgAAAB8AAAAuAAAAbQAAAFwAAAAoAAAAJgAAAG8AAABSAAAAIAAAADwAAABkAAAALgAAAGYAAAAsAAAAaQAAAFQAAAAiAAAAcQAAACIAAABnAAAAUAAAACkAAAArAAAAYwAAACMAAAAvAAAAWAAAADkAAABNAAAAOwAAAHkAAAB9AAAAKAAAAGQAAABhAAAALAAAACQAAAAxAAAAbwAAAFQAAAAYAAAAKgAAAFgAAABbAAAAKgAAAFwAAAAgAAAAagAAACIAAABkAAAAXwAAACsAAAAsAAAALwAAAHsAAABhAAAATgAAABsAAAAhAAAANgAAAHYAAABOAAAAIgAAACcAAAByAAAAYwAAAGEAAAAtAAAAJQAAAC0AAABpAAAAVQAAABwAAAA7AAAAWwAAAFgAAAApAAAAHAAAACIAAAAVAAAAZwAAADkAAABoAAAAbQAAACYAAAAlAAAAZAAAADQAAABpAAAAQAAAAFsAAABfAAAAKAAAACkAAABvAAAAQAAAAF4AAABgAAAAIwAAAB8AAABoAAAAVwAAACIAAAA3AAAAcgAAADoAAABoAAAAUwAAACoAAAAjAAAAcwAAAE8AAAAiAAAAIQAAAGUAAABkAAAAJQAAACQAAABgAAAAKwAAAGgAAAA4AAAAWgAAAGAAAAAuAAAAKgAAAGoAAAA+AAAAWwAAADYAAABDAAAAQQAAAGEAAABfAAAAIwAAACgAAABdAAAAWAAAACsAAAAjAAAAbQAAAEcAAAAoAAAAPwAAAFQAAABTAAAAIgAAACUAAAByAAAASAAAACEAAAA6AAAAeAAAAGwAAABUAAAAKQAAACIAAABxAAAAJAAAAGQAAAAiAAAAegAAAFcAAAAjAAAAIgAAAF8AAABaAAAAJwAAACkAAABmAAAARwAAACEAAAAiAAAAOQAAAGoAAAAzAAAAVgAAAFEAAAAhAAAAIAAAACMAAAAWAAAAIAAAAC4AAABUAAAAKwAAAGgAAAA0AAAAWwAACgUAAAB/AAAAawAAACwAAACBAAAAKwAAADsAAABsAAAAaAAAACgAAAA8AAAAZAAAAEsAAAAkAAAAPgAAAGgAAABxAAAAXgAAACYAAAAsAAAAQgAAAGsAAAAoAAAAaQAAADMAAABzAAAAMwAAAFUAAAAsAAAAZgAAADcAAABfAAAAagAAAFMAAAApAAAALgAAAHMAAAApAAAAOQAAAGwAAABgAAAAGQAAACgAAABGAAAALwAAAGwAAABpAAAAXgAAACIAAAArAAAAfAAAAC4AAAApAAAAcQAAACwAAACAAAAATgAAACEAAAAlAAAAeQAAAGEAAAAgAAAAJQAAAGsAAABSAAAAIQAAAC4AAABwAAAAbQAAACQAAAAlAAAAbwAAADYAAABcAAAAWAAAACMAAAAgAAAAbgAAAHMAAAAjAAAAewAAACkAAAB9AAAALAAAACkAAAB2AAAALQAAAHoAAABJAAAAKQAAACAAAABhAAAAJgAAABYAAAAVAAAAXwAAABgAAAAmAAAAMwAAAF0AAAA6AAAAawAAACkAAAB5AAAAcAAAACoAAAA3AAAAYgAAAFoAAAAhAAAAHwAAAGMAAAAvAAAAYwAAADMAAABkAAAAPwAAAIEAAABQAAAAJAAAADoAAABdAAAAOQAAAIQAAABVAAAAJAAAAG4AAAAYAAAAYwAAACUAAAAyAAAAXgAAAC8AAABoAAAALwAAAHAAAABvAAAALAAAADoAAABmAAAAXAAAACQAAAAgAAAAWwAAACIAAABIAAAAMwAAAB8AAAAwAAAAeQAAAGkAAAAoAAAAJgAAAGsAAABeAAAAIQAAADUAAABvAAAANgAAAGEAAABSAAAAKwAAACEAAABuAAAAVwAAACMAAAApAAAAWwAAAFsAAAAsAAAALAAAAGwAAAAjAAAAZQAAACUAAABuAAAAVgAAACIAAAAgAAAAbQAAAEgAAAAiAAAAZAAAACYAAAA8AAAAbAAAAGoAAAAiAAAANQAAAGgAAAA1AAAAZgAAAE8AAAAhAAAAIAAAABsAAAAYAAAAIQAAACoAAABSAAAAKwAAAG0AAABYAAAAIAAAAD8AAACFAAAAcwAAAFEAAAAlAAAAIQAAADwAAABlAAAAJgAAAGcAAAAwAAAAYgAAAGcAAAAkAAAAZAAAAB4AAAB2AAAALQAAAGkAAAArAAAAdwAAACgAAABFAAAAUwAAACkAAABiAAAAOQAAAFIAAAAxAAAAYgAAAFgAAAAgAAAAOQAAAHoAAAB5AAAAVgAAACUAAAAiAAAAOwAAAGcAAAAtAAAAawAAADMAAABKAAAAOQAAACIAAApPAAAAhwAAAGsAAAAlAAAAJgAAAHAAAABRAAAAJQAAAD0AAABxAAAAMgAAAHEAAAA6AAAAWwAAAC8AAAByAAAAPAAAAHAAAABZAAAAIQAAACkAAABlAAAASwAAACIAAAAhAAAAawAAADIAAAByAAAAKgAAAHYAAABNAAAAIQAAACgAAABlAAAAUwAAACQAAAAoAAAAZQAAAFIAAAAjAAAAOwAAAHQAAAAxAAAAcAAAAD8AAABlAAAAGAAAACYAAAAUAAAAFwAAADkAAABhAAAAMwAAAG0AAAA/AAAAbAAAAIAAAAAjAAAAZgAAAFMAAAAjAAAAKQAAAD4AAABhAAAAKwAAAGIAAABsAAAAJgAAADAAAAB0AAAAMAAAAHIAAABIAAAAIAAAAC4AAABvAAAAVQAAABsAAABpAAAAKAAAACkAAABdAAAAMAAAAGEAAAAyAAAAbgAAADEAAABlAAAAgQAAACgAAABmAAAAUgAAACMAAAAoAAAAOwAAAGoAAAAtAAAAZgAAADsAAABLAAAAKQAAAHEAAAB9AAAAKAAAAHAAAABSAAAAIQAAACYAAAA3AAAAXgAAACYAAABlAAAAMAAAAF8AAAA6AAAAaQAAAE0AAAAiAAAAIwAAAG8AAABRAAAAKAAAACIAAAB4AAAAMQAAAF4AAAAlAAAAaQAAAFAAAAApAAAANgAAAGwAAAA/AAAAaQAAAH0AAAAnAAAAcgAAAFEAAAAkAAAAKAAAAG4AAAAiAAAAJQAAAGIAAAA7AAAAXQAAAD0AAABZAAAAIAAAABUAAAAfAAAAFQAAADQAAABgAAAAOwAAAHQAAABDAAAAagAAAHIAAAArAAAAfQAAAFIAAAAiAAAAJgAAAEUAAABlAAAAKQAAAGYAAABjAAAAKAAAACQAAACAAAAAVwAAACEAAAAkAAAAegAAAEEAAABVAAAAXQAAAFYAAAApAAAAJAAAAGkAAAAhAAAAOAAAAF8AAAA7AAAAcwAAAEEAAABnAAAAbgAAACsAAAB3AAAAWAAAACgAAAAlAAAAOAAAAF8AAAAwAAAAdwAAAD8AAABKAAAAbAAAADYAAAAjAAAAKAAAADwAAAByAAAAbgAAAFMAAAAhAAAAIQAAACQAAABlAAAAVAAAACcAAAAlAAAAcQAAACwAAABuAAAAOAAAAGwAAABKAAAAKgAAACUAAAB9AAAANgAAAG0AAAAtAAAAZQAAAEUAAAAqAAAAMwAAAGQAAABsAAAAVAAAACAAAAAnAAAAOwAAAHEAAABvAAAAVgAAACMAAAAgAAAAJgAAAGoAAABSAAAAJQAAACIAAAB0AAAKBQAAAH0AAAA1AAAAGAAAACMAAAB/AAAAPwAAAGEAAABlAAAAIAAAAB8AAABsAAAAbwAAACkAAAA4AAAAWQAAAFwAAAApAAAAKgAAAG4AAAA2AAAAUgAAADMAAABmAAAAMwAAAHoAAABWAAAAIQAAACgAAABnAAAAaQAAACwAAAA3AAAAZQAAACQAAABkAAAAVQAAACIAAAAhAAAAYAAAAE0AAAAfAAAAHgAAAGsAAABoAAAAJgAAADgAAABaAAAAXAAAACgAAAArAAAAWwAAACQAAABLAAAAMwAAAHcAAABtAAAAWQAAACAAAAAwAAAAaAAAACcAAABdAAAAIQAAACoAAABvAAAAJgAAAFkAAABVAAAAJAAAACIAAABlAAAAXwAAACMAAAApAAAAYwAAAFYAAAAnAAAAIQAAAGUAAABPAAAAJAAAACkAAABUAAAAVgAAACMAAAAkAAAAewAAAG4AAABaAAAAIgAAADEAAABpAAAAKQAAAGIAAAAgAAAAJgAAAGgAAAAoAAAAYwAAAFYAAAAlAAAAIwAAADUAAAAmAAAAFQAAAB8AAABcAAAAXQAAAFcAAAAgAAAAIAAAADAAAABuAAAAWQAAACgAAAAlAAAAeAAAAFIAAAAgAAAAMwAAAGUAAAArAAAAZgAAADIAAABjAAAAUwAAACIAAAB0AAAAIgAAAGYAAABWAAAAJwAAACsAAABjAAAAJAAAACoAAABvAAAAMAAAAFoAAABcAAAAWQAAACEAAAAgAAAALAAAAGoAAABbAAAAJgAAACYAAABsAAAAVAAAACEAAAAuAAAAZAAAAC8AAABNAAAAMgAAACEAAABqAAAAIgAAAGIAAABbAAAAKAAAACoAAAAvAAAAcgAAAF8AAABUAAAAHwAAACQAAAAoAAAAawAAAFEAAAAhAAAAJwAAAHMAAABoAAAAYAAAAC0AAAAiAAAALAAAAGoAAABVAAAAIgAAACkAAABWAAAAWgAAACoAAABcAAAAIQAAAGoAAAAiAAAAYQAAAFwAAAAqAAAAKgAAACsAAAB0AAAAYQAAAE8AAAAfAAAAKwAAADoAAABbAAAANQAAABYAAAAWAAAAXQAAAC0AAAAiAAAAHwAAAGsAAABaAAAAIQAAADgAAABsAAAARAAAAGoAAABTAAAAKQAAACIAAABzAAAASQAAACEAAAAiAAAAZQAAAGAAAAAkAAAAIwAAAGIAAAAsAAAAaQAAADkAAABbAAAAYgAAACoAAAApAAAAZQAAADQAAABlAAAAYQAAACgAAAAbAAAAaAAAAFoAAAAoAAAALQAAAG8AAAA4AAAAXAAAChQAAACpAAAAPQAAAGoAAABPAAAAIQAAAE4AAAA0AAAAUgAAACEAAAAgAAAAeAAAAFcAAAAqAAAAdwAAAFYAAAAxAAAAIwAAAHEAAAAkAAAAYwAAACEAAAB4AAAAYAAAACAAAAAhAAAAYQAAAFoAAAAnAAAAKgAAAG8AAABHAAAAIQAAACMAAAA3AAAAaQAAADIAAABVAAAAUAAAACMAAAAiAAAAcAAAAEoAAAAiAAAAPwAAAHQAAABwAAAAVgAAADIAAAAkAAAAcgAAACUAAABjAAAAIAAAAGIAAAAsAAAAJAAAABUAAAA0AAAAFwAAADEAAABmAAAAXAAAACEAAAAyAAAAaQAAAHMAAABdAAAAJwAAACsAAABHAAAAbAAAAC4AAABqAAAALQAAAHMAAAAxAAAAVAAAAC8AAABmAAAANgAAAF0AAABpAAAAUwAAACAAAAAuAAAAcwAAACoAAAA/AAAAbwAAAGcAAAAsAAAAPAAAAGYAAABMAAAAIwAAADsAAABoAAAAcQAAAF0AAAAnAAAAKwAAADwAAABuAAAAKgAAAGoAAAA1AAAATgAAACYAAABMAAAANQAAAHMAAAA4AAAAZwAAAEwAAAAhAAAAKgAAAGYAAABtAAAAIQAAADcAAABsAAAAMwAAAGQAAABbAAAAIwAAACAAAABuAAAAbQAAAF0AAAAhAAAAKwAAAIQAAAApAAAAKQAAAHIAAAAvAAAAegAAAEgAAAAiAAAAJQAAAHcAAABYAAAAJQAAACQAAABsAAAAUgAAACIAAAAtAAAAbwAAAG0AAAAhAAAAKQAAAHQAAAA4AAAAaAAAAFkAAAAjAAAAIAAAABwAAAAiAAAAFQAAADUAAABdAAAAMwAAAGIAAAA9AAAAgQAAAFAAAAAhAAAAOwAAAGAAAAA5AAAAbgAAAFcAAAAhAAAAbgAAACYAAABkAAAAJgAAADMAAABeAAAAPQAAAGgAAAAsAAAAcwAAAHAAAAArAAAAPQAAAGQAAABSAAAAIQAAACAAAABiAAAALQAAAF8AAAAyAAAAZAAAAD0AAAB9AAAAUwAAACcAAAA/AAAAXAAAADgAAABwAAAAVwAAACEAAABTAAAAJgAAACIAAABKAAAAMQAAAG0AAABXAAAAIwAAACUAAABcAAAAWQAAACoAAAAmAAAAcgAAACcAAABjAAAAKQAAAGsAAABaAAAAIQAAACAAAAB6AAAASgAAACMAAABqAAAAJwAAADsAAABwAAAAagAAACEAAAA1AAAAaQAAADUAAABmAAAATQAAACkAAAAfAAAAbgAAAFkAAAAjAAAAJQAAAF0AAAooAAAAlwAAAGcAAAAkAAAAOAAAAG8AAAAoAAAAbgAAAFgAAAAjAAAAIAAAABkAAAAWAAAAIAAAACwAAABkAAAAZQAAAC8AAABkAAAAHQAAAHQAAAAnAAAAaQAAAC4AAAB7AAAAJwAAAC8AAABVAAAAJQAAAGcAAAA3AAAAVAAAADgAAABdAAAAVQAAACAAAAA6AAAAfAAAAS0AAABQAAAAIgAAAD8AAABBAAAAZQAAACUAAABmAAAALQAAAGQAAABqAAAALwAAAGIAAAAgAAAAcQAAACsAAABnAAAAKwAAAHAAAAApAAAANwAAAFcAAAAzAAAAYgAAAFgAAAA1AAAALAAAAG8AAAA9AAAAbQAAAGAAAAAXAAAAJgAAAGgAAABIAAAAIwAAAB4AAABqAAAAMgAAAHEAAAAnAAAAiAAAAE0AAAAfAAAAKAAAAGcAAABRAAAAIwAAACYAAABqAAAAUgAAACIAAAA6AAAAcAAAADUAAABtAAAAOgAAAFgAAAA2AAAAdQAAAEMAAABsAAAAXAAAABcAAAApAAAAaAAAAEoAAAAhAAAAIgAAAGcAAAAvAAAAcwAAAD0AAABgAAAAKwAAABYAAAAWAAAAIwAAAGgAAAAlAAAAMgAAAHQAAAAtAAAAeQAAAEkAAAAiAAAAKgAAAHMAAABWAAAAGwAAAGkAAAApAAAAJAAAAFwAAAAvAAAAYQAAADMAAABuAAAANQAAAGwAAACIAAAAKgAAAGUAAABSAAAAJAAAACoAAAA8AAAAYgAAACYAAABkAAAAagAAACMAAAAzAAAAcwAAAC0AAAB1AAAASAAAACIAAAAtAAAAcwAAAFYAAAAbAAAAZwAAACcAAAAqAAAAYgAAADEAAAAnAAAASwAAACAAAABzAAAAWQAAACgAAAAkAAAAQQAAAHsAAAA6AAAAXQAAACQAAABrAAAAVAAAACUAAAA2AAAAbAAAADcAAABrAAAAfAAAACkAAABwAAAAUwAAACYAAAAsAAAARAAAAF0AAAAlAAAAaAAAADAAAABdAAAAPgAAAGoAAABSAAAAIAAAACQAAABwAAAAUgAAACsAAAAlAAAAdgAAADkAAABdAAAAJwAAAGkAAABTAAAAKQAAADYAAABqAAAAGAAAADsAAAAXAAAAGAAAADIAAABjAAAAPQAAAHsAAABQAAAAIwAAACUAAAB6AAAAPgAAAFcAAABdAAAAWQAAACoAAAAmAAAAZgAAACEAAAA4AAAAXwAAADAAAAB0AAAANAAAAGoAAAB1AAAAKwAAAH4AAABSAAAAJAAAACoAAAA+AAAAZwAAACkAAABYAAAKKAAAAJMAAABMAAAAhAAAAFcAAAAgAAAAIwAAAHgAAAA6AAAAWQAAAGIAAABXAAAAKAAAACQAAABqAAAAIwAAADMAAABLAAAALwAAAHoAAABBAAAAagAAAEsAAAArAAAAJgAAAHAAAAAuAAAAbwAAADMAAABlAAAARQAAACIAAAAqAAAAZAAAAHQAAABUAAAAIQAAACgAAAA+AAAAcwAAAG8AAABTAAAAIgAAACMAAAAnAAAAZQAAAFcAAAAiAAAAIwAAAHoAAAArAAAAcwAAADoAAABpAAAASwAAACoAAAAlAAAAdAAAADQAAABqAAAAMAAAAGwAAABFAAAAJwAAACsAAABvAAAAGAAAACkAAAAWAAAAFgAAAC0AAABSAAAAMAAAAGUAAAAyAAAAdQAAAFkAAAAjAAAAJQAAAHAAAABpAAAAKwAAAEEAAABsAAAAJAAAAGgAAABaAAAAJAAAACIAAABjAAAAUgAAACEAAAAgAAAAbwAAAGoAAAApAAAAOAAAAF4AAABeAAAALgAAADwAAAB1AAAANgAAAFMAAAAyAAAAaQAAADkAAAB0AAAAWwAAACYAAAApAAAAaQAAAGQAAAArAAAAOAAAAGoAAAAtAAAAYwAAACUAAABLAAAALAAAAGQAAABfAAAAIgAAACkAAABjAAAAVwAAACcAAAAgAAAAZgAAAEwAAAAiAAAAKgAAAFQAAABZAAAAIwAAACQAAAB4AAAAbgAAAFwAAAAhAAAAJgAAAGkAAAAoAAAAWwAAACMAAAAmAAAAaAAAACYAAABYAAAAUwAAACIAAAAhAAAAYgAAAGgAAAAiAAAAKQAAAGQAAABVAAAAIgAAACEAAABlAAAASwAAACMAAAA6AAAAXQAAAFUAAAAqAAAAJAAAABoAAAAZAAAAIgAAADMAAABnAAAAOAAAAGIAAABUAAAAIAAAAHUAAAAiAAAAagAAAFMAAAApAAAAKwAAAGYAAAAlAAAAKwAAAGwAAAAvAAAAWgAAAFsAAABUAAAAHwAAACEAAAAuAAAAcgAAAFwAAAAlAAAAJQAAAG8AAABUAAAAIgAAAEYAAABkAAAANgAAAGcAAAA3AAAAYAAAAFQAAAAiAAAAcwAAACIAAABoAAAAVAAAACoAAAArAAAAbAAAACcAAAAxAAAAWAAAADwAAABXAAAAPQAAAHcAAAB5AAAAKQAAAGUAAABmAAAAKAAAACUAAAAtAAAAbgAAAFcAAAAbAAAAOgAAAGQAAABbAAAAKgAAAFsAAAAhAAAAaQAAACQAAABnAAAAXwAAACwAAAAsAAAALAAAAGgAAABNAAAAIAAABv8AAAAUc3RjbwAAAAAAAAABAAAAMAAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTcuNzIuMTAx' controls>Sorry, seems like your browser doesn't support HTML5 audio/video</video></div>\"\n      ],\n      \"text/plain\": [\n       \"<moviepy.video.io.html_tools.HTML2 object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"clear_output()\\n\",\n    \"display(mpy.ipython_display(video_fn, height=400))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Making grids of videos\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"['rainbow-SeaquestNoFrameskip-v4-3.mp4', 'apex-SeaquestNoFrameskip-v4-1.mp4', 'ga-PitfallNoFrameskip-v4-3.mp4', 'dqn-SeaquestNoFrameskip-v4-2.mp4', 'dqn-SeaquestNoFrameskip-v4-3.mp4', 'a2c-PitfallNoFrameskip-v4-2.mp4', 'apex-PitfallNoFrameskip-v4-3.mp4', 'rainbow-MontezumaRevengeNoFrameskip-v4-1.mp4', 'rollout_video.mp4', 'a2c-MontezumaRevengeNoFrameskip-v4-3.mp4', 'a2c-SeaquestNoFrameskip-v4-2.mp4', 'a2c-MontezumaRevengeNoFrameskip-v4-1.mp4', 'xy2rgb2.mp4', 'xy2rgb.mp4', 'es-MontezumaRevengeNoFrameskip-v4-2.mp4', 'rainbow-PitfallNoFrameskip-v4-1.mp4', 'dqn-PitfallNoFrameskip-v4-1.mp4', 'es-SeaquestNoFrameskip-v4-1.mp4', 'rainbow-PitfallNoFrameskip-v4-3.mp4', 'a2c-MontezumaRevengeNoFrameskip-v4-2.mp4', 'es-PitfallNoFrameskip-v4-1.mp4', 'apex-SeaquestNoFrameskip-v4-3.mp4', 'dqn-PitfallNoFrameskip-v4-2.mp4', 'rainbow-PitfallNoFrameskip-v4-2.mp4', 'apex-PitfallNoFrameskip-v4-1.mp4', 'a2c-SeaquestNoFrameskip-v4-1.mp4', 'es-MontezumaRevengeNoFrameskip-v4-3.mp4', 'apex-MontezumaRevengeNoFrameskip-v4-2.mp4', 'ga-MontezumaRevengeNoFrameskip-v4-2.mp4', 'es-MontezumaRevengeNoFrameskip-v4-1.mp4', 'a2c-PitfallNoFrameskip-v4-3.mp4', 'rainbow-SeaquestNoFrameskip-v4-2.mp4', '__temp__.mp4', 'dqn-MontezumaRevengeNoFrameskip-v4-3.mp4', 'ga-PitfallNoFrameskip-v4-1.mp4', 'ga-MontezumaRevengeNoFrameskip-v4-3.mp4', 'rainbow-MontezumaRevengeNoFrameskip-v4-3.mp4', 'ga-SeaquestNoFrameskip-v4-1.mp4', 'rainbow-MontezumaRevengeNoFrameskip-v4-2.mp4', 'ga-SeaquestNoFrameskip-v4-2.mp4', 'ga-MontezumaRevengeNoFrameskip-v4-1.mp4', 'es-PitfallNoFrameskip-v4-2.mp4', 'dqn-MontezumaRevengeNoFrameskip-v4-2.mp4', 'rollout_video_pitfall.mp4', 'apex-SeaquestNoFrameskip-v4-2.mp4', 'a2c-PitfallNoFrameskip-v4-1.mp4', 'dqn-PitfallNoFrameskip-v4-3.mp4', 'apex-MontezumaRevengeNoFrameskip-v4-1.mp4', 'ga-PitfallNoFrameskip-v4-2.mp4', 'apex-PitfallNoFrameskip-v4-2.mp4', 'rainbow-SeaquestNoFrameskip-v4-1.mp4', 'a2c-SeaquestNoFrameskip-v4-3.mp4', 'dqn-SeaquestNoFrameskip-v4-1.mp4', 'dqn-MontezumaRevengeNoFrameskip-v4-1.mp4', 'es-PitfallNoFrameskip-v4-3.mp4', 'ga-SeaquestNoFrameskip-v4-3.mp4', 'apex-MontezumaRevengeNoFrameskip-v4-3.mp4', 'es-SeaquestNoFrameskip-v4-2.mp4', 'es-SeaquestNoFrameskip-v4-3.mp4']\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import glob\\n\",\n    \"print (glob.glob(\\\"*.mp4\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"MontezumaRevengeNoFrameskip-v4 a2c 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 a2c 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 a2c 3\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 es 3\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 ga 3\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 apex 3\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 rainbow 3\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 1\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 2\\n\",\n      \"MontezumaRevengeNoFrameskip-v4 dqn 3\\n\",\n      \"[MoviePy] >>>> Building video composite.mp4\\n\",\n      \"[MoviePy] Writing video composite.mp4\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 2501/2501 [01:13<00:00, 33.83it/s]\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[MoviePy] Done.\\n\",\n      \"[MoviePy] >>>> Video ready: composite.mp4 \\n\",\n      \"\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"importlib.reload(atari_zoo.utils)\\n\",\n    \"from atari_zoo.utils import rollout_grid\\n\",\n    \"\\n\",\n    \"clip, clip_dict = rollout_grid(env=env,algos=algos,run_ids=[1,2,3],clip_resize=1.0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clear_output()\\n\",\n    \"display(mpy.ipython_display(\\\"composite.mp4\\\", height=800))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.5.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "notebooks/Training log visualization.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%matplotlib inline\\n\",\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Sample code for visualizing log files\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/joel.lehman/code/rl_base/env/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\\n\",\n      \"  from ._conv import register_converters as _register_converters\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"pygame 1.9.4\\n\",\n      \"Hello from the pygame community. https://www.pygame.org/contribute.html\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import sys\\n\",\n    \"sys.path.append(\\\"../\\\")\\n\",\n    \"import atari_zoo\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Gathering logs across runs of Algo/Game pairs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 62,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"game = 'ZaxxonNoFrameskip-v4'\\n\",\n    \"algo = 'ga'\\n\",\n    \"\\n\",\n    \"from atari_zoo.log import gather_logs_across_runs, gather_logs_across_algos\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 63,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model1_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model1_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_1\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model2_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model2_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_2\\n\",\n      \"Model path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model3_final.pb\\n\",\n      \"Data path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/ZaxxonNoFrameskip-v4/model3_final_rollout.npz\\n\",\n      \"Log path: https://dgqeqexrlnkvd.cloudfront.net/zoo/ga/checkpoints/ZaxxonNoFrameskip-v4_3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"df = gather_logs_across_runs(algo,game,range(1,4),local=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Plotting with seaborn\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import seaborn as sns\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<matplotlib.axes._subplots.AxesSubplot at 0x7fa6e7261550>\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAZUAAAEKCAYAAADaa8itAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsXXV4HcX6fudo3NrUJXWh7i2llAru8MOhFLhIufiVlotdLnq5uJfiUhxaKFXq7m5pk9SSxj05tju/P3ZnzqwcSZqkpez7PH2as2d2d3bP7vfNZ+9HKKWwYMGCBQsWGgK2kz0BCxYsWLBw+sBSKhYsWLBgocFgKRULFixYsNBgsJSKBQsWLFhoMFhKxYIFCxYsNBgspWLBggULFhoMllKxYMGCBQsNBkupWLBgwYKFBoOlVCxYsGDBQoPBcbIn0NRo3rw5zcjIONnTsGDBgoU/DDZt2lREKU2PZuyfTqlkZGRg48aNJ3saFixYsPCHASHkULRjLfeXBQsWLFhoMFhKxYIFCxYsNBgspWLBggULFhoMllKxYMGCBQsNBkupWLBgwYKFBoOlVCxYsGDBQoPBUioWLFiwYKHBYCkVCxYsNBlyy2qxeG/+yZ6GhUaEpVQsWLDQZLjojRW47ROr+Ph0hqVULFiw0GQorfGf7ClYaGRYSsWCBQsnDI9fQtdHf8PsbblRjaeUNvKMLJwsWErFggULJ4zCSi8CMsWLc/dGNV6SLaVyuqLRlAoh5CNCSAEhZKewLY0QspAQkqn+n6puJ4SQNwghBwgh2wkhg4R9JqnjMwkhk4TtgwkhO9R93iCEkMa6FgsWLDQsApZSOW3RmJbKJwDO122bCuB3Smk3AL+rnwHgAgDd1H93AngXUJQQgCcBDAcwDMCTTBGpY/4i7Kc/lwULFk5RWJbK6YtGUyqU0uUASnSbLwPwqfr3pwAuF7Z/RhWsBZBCCGkN4DwACymlJZTSUgALAZyvfpdEKV1LFefsZ8KxLFiw0MSoq58gIP25lYosU2w/Wnayp9EoaOqYSktKaZ7693EALdW/2wI4Iow7qm4Lt/2oyXYLFiycREQbgA/IciPP5NTGjJVZuPStVViXVXyyp9LgOGmBetXCaJLlCiHkTkLIRkLIxsLCwqY4pQULf1ocLq5BeYTU4T+7+2tXbgUAILe89iTPpOHR1EolX3VdQf2/QN1+DEB7YVw7dVu47e1MtpuCUjqdUjqEUjokPT2qjpgWLFioA5iBQgGMeWkJLnh9edjxf/ZAPbtfBKdfflFTK5XZAFgG1yQAs4Ttt6hZYCMAlKtusvkAziWEpKoB+nMBzFe/qyCEjFCzvm4RjmXBgoUmhqxze+WWe8KO/7NbKuzqT8ec1UbrUU8ImQlgLIDmhJCjULK4XgDwLSHkdgCHAFyjDv8NwIUADgCoATAZACilJYSQ/wDYoI57mlLKgv9ToGSYxQKYq/6zYMHCSUBdlYRlqZy+199oSoVSen2Ir8abjKUA7g1xnI8AfGSyfSOAPicyRwsWLDQMmI6IVlYGpD93oJ7dplqfdFLn0RiwKuotWLBwwmDuLxpl7s2pZqlIMm1aAa9e/tQfd6DaG2iQQ24+XIpZW0OGlpsMllKxYMHCCYMplWgNkFMtpvKvn3ag1xPzmswtJcagqhpIqVz5zmo88PXWBjnWicBSKhYsWDhhlFT7AAC+QHSr/VPNUvl6g1IOF+20qrwBrD2BGhNRd52IHqvyBnDbJxtwoKCq/gdpYFhKxYIFCyeMGz5YBwDwR1kpLzVQ8eORkhoUVnob5FhA9EWZD8zcguumr0VxVf3OLboJpRPQKvvzK7F4bwEmvLKs3sdoaDRaoN6CBQt/PtT6o7RUGoim5az/LgEA5LxwUYMcL1q33J48pXgx2uvVQ9QjJ5K0YDsFc5ItS8WCBQtNBiYDTzX3F0M08yqv8fM6nPoaGeJp/CegVBrK4mtIWErFggULTQa2rj5VlYoUhQX1+u+Z/O/6e66CO/oC9b8XpyIxp6VULFiw0GRgbY/qu8Iur/FDbkSFFI2yE+MueiaBaEEbylI5BYsoLaViwYKFE0Jd0nC5pVKPFXZBpQf9n16Ad5YeqPO+0SKamIqoSOor1MW9ToSx+VRLzQYspWLBgoUTRF3kGoup1EcYHimpAQAs2qPw0DZGTUk0Al7WBNnra6kE9yutDs/oHA6nohvRUioWLFjQoNobwI6j5VGPr4uCYKy89RGGNWrFe5zLXu9jREJUloowpr6uK/Esd3y2sd4Kks3l09uGoXN6PL83JxOWUrFgwYIGkz/egEveWhl1qmtd4gonYqmISkWWKV5esD/qfXceK8eSvQURx0WjqMTrra9i09+yvAiszqHAzp+e4MbEXi1D/hYVHj+K6llTU1dYSsWCBQsarM9RiMCjFZh1USqsrqI+K3yPWhMS63Jgf0El3lt2MOp9L35zJSZ/siHiuGiUnTj1+iYc6M+y73hlvY7D5mu3ERBCQroin/9tL85/bUW9zlFXWErFggULpohWV0RrdRRUenix4PF6rMy5peK0o8rTMHxZekQTIxFdVdEyCOihz2ArVmlu6gpRqdhI6DiTLFPYm0jaW0rFggULpog2synaxfp9X23hf8/ffbzO82FKJdZljyiEi6q8OFRcXedzRGWpiO6veioVvaVWX4tHq1RCWyoSpbA3UfW9pVQsWPiT4slZO5ExdY5m27GyYM/0aN1a0SofMW5QUw+a+aD7y84JLPkcdNJ09IuLcfZLS6M6rrhvNNlf4nh/PZVBtU9radU3NsP2c6iWSqjfTJYpbDZLqViwYKER8emaQ4ZtG3NK+N/RFhlGWt1TSiHJFIfVlGAA8PrrLoyZInHZbQal4gtoj+epw/FFRVLnOpUoLZXiKi/Ka4Kpw+W12jTi+tabyLqYCqXmLjCJUtgtpWLBgoWmgOiKEYWzmZybsSIL57+2XLPNTIgluBWu2nk7j6PTtN8wfXmW5ntPPYgYF+3JV+dFUaETyt4QlPu7cyvw0DfBHiOmAldjqYQX7he9sQK/7Qi67pbtL4xKIQx+ZhGGPLuQfy6r0c4/IFFQSvHaov0aazESAjr3F2AeC5Nky/1lwYKFJoIo4EWhaiYsn5mzB3t1mUp699eVg9ryfZftV9J4f96i7UgYrVIpqvLyzojHSmv5vPTCX2+pMNz+6Qb8JJzb7JrEYHs4BUEpxa7cCs22z9ceijoLjZ1HkikqdYkGkkyRVVSN1xZlYsoXm6I6HhC89yxQD5i7wCiF5f6yYMFC02B3bgXyyhWBLdamRFuQpxfEsU47av0SDhVXo0NaPABgX75WEXlDKAE9hjyzCBe9sQK+gMwViUyD54xx2sIeL79Cm2XmM0lljtZSCaVwsgrDJwSIlmCFx49Kj7GCXjxvea2fswdEgqQe22EjXGmYTdOyVCxYsNDocNoVIXPt9LUY+fxiANpVuzcgY10U3Q31sWrmu79xxrqQFklAplEXV+YU12j6x8uUIiDLSIt34aWr+6tzNT+PXsD6TRiBxXmEy8KqbzBdLDo8UFBliKew87L4SE5xDc767xIcKKiMqNjZnGw2wgtLzSwViVI0VesVS6lYsPAnhcNmfP3FoPVL8/fh2ulrsfVImWGcuGrXu7+Ya8fjl8JaJJ4orRUAqPEH3UWSrAT+7TYCt8Omniu6Y3klo/IRlUW4FGEzKyca5FcElcqV76zG95uOAgCm3zwY2c9fCACYu/M4Jr6qjVVNeGU5XluUiXBgCsQRIqZyvNwDSaZqnYplqViwYKERwSwVEaKlMntbLgBjppIyLjT9e2mNkpmVEucKGzupS7C+2hscK8kUAYnCYSNwOxWuq2jdaWbFilKEOBJDfWtS9O6uFZlFAIAYpx2EENhtxBCrYRB7t5jOSVf8CAR/j8JKL0Y8/zv+O2+vlf1lwYKFxofLYWKpmAhOt8k4jVLRCWKW7psW5wrplgKiVwQADO4vSaZw2IOWSrjziDAL6IvXEs7FFcpdRw2kK0EUVHpw84frAQC3jsrQzIHd/xMR9iyl2U6ClgpTKmWqcv99bwEkmTZZ62FLqViw8CeFmfvLjJPLfFto91eHtDgAQIskN3YcK0f7tFj+3XVD2+OqQe0A1M1SqfFp3V8BmcJhswlKRTvH5Fin6XHMriVaS8Vfj5jKStUqAYCbRnRASpyTFz4ypeKIUqlQSrExp0QTZxGzvwjRBup54F6mkC1LxYIFC40Np8PE/WUSqDaLV2iD21ph+8JV/QAAWw6XYeexChwpqcVPU0bh89uH4YWr+mFi75bqccMrFVF41viNlordRrhg1lsgzeJdpsc0s1Q0MZVwSqUOlhWD6DqMcdrhstt4irTLXjdL5ZsNR3D1e2swf1ewTobdB0KC7i9235hlIrH71USWiqNJzmLBgoVTDk4ThkEz91etifD3adxf2u8S3A4kxzo1RXwDO6Tyv90R0oD5cYWpiO4vxVKRlZiKwzymEoo+xeycAU2dSrjsrxDfhTFgKmqDFlaM0w6n3cazwdx1tFRYfdCxsmCadEBQFja9pSLEWGQZMDFMGwWWpWLBwp8UTrPsLxP3ELMornlvjTDO3P01rFMaAGgys/Sw8yyl8O4k0VXFVvdAsE5FPIfXL2HZ/kKsPlBkmF+oY/JrkaOLqUTDSCzLFP+bv4+zMLOkBUCp33E7bFyxObmlEp0Y9upiMex8zNLRB+qZBSnLFk2LBQsWmgDm7i+j4PSqSmW9wAsWKvtr+s2DASgCLjZEF8JgPYV2+8HCKsxcf5h/FgU8s5ZYgy4lpkI0Vs+kj9bjhhnrDPuK3RDN3F+i+05UXnqEUlTi1u3HyvHWkgN48BuFkbnCo3V/idYhUw4VJsWQZmBzdwvHYPcBEGIoeqWiur+sQL0FCxYaFebuL/OYij7DS1y1i98RwRUTKgYRiqNq/MvLMO3HHaZzYazGCW5HMEYQxv0VkGTcPKIj5j14Fs47o5VwHKPSEK9lfXap6ZyBoMvvrRsGhhzDBDmLQ4nHttuIRpGHigfpMe3HHfD4JX5+0VKRBPZh/X1lFqRMrUC9BQsWmgB69xer/9Cj1i8ZVtPMUvllWy7eXHyAb7cLAo4VN/Zpm6TZN1zlNxBUUqJAZkol3u0Q6lRsIVOKA5KSctyzVZImE6y0xqyaXTlPj5aJWJtVHLIrJVNyqXHaJICfthzjLsLFexXSSzZzn25eLhNLRY8vbh+u+Txz/WHM3prLjyUaHJJoqajbL35zJWasyOLXJcl/ApoWQshDhJBdhJCdhJCZhJAYQkgnQsg6QsgBQsg3hBCXOtatfj6gfp8hHGeaun0fIeS8k3EtFiz8UeHQFT96A5LB/WW3EbyycD825mhX8Ezw3jdzC5btL+TbmWCz2wgXajNuGarZl0DrptFD0rlvAKDWF0Ccyw67jWiyv5hS0but/LLMLbHLB7bFX8/pCsDIDgwEYypn90hHlTeAncfK+XflNX4sV69P7F2iB2NhfnuJQi7JWJT1cRiN+ytEK8bR3ZrjvZsGY2yPdL7NK8ncohEVf0CwVJiVWFjpxTNz9vAECu7+Ol0tFUJIWwD3AxhCKe0DwA7gOgAvAniVUtoVQCmA29VdbgdQqm5/VR0HQkhvdb8zAJwP4B1CiLkT14IFCxw/bTmKGSuyDO4nj182uL+YYL/js42a7aGC1swFIy6K9ZX7XLYJh3j42yA9vcQtFSFQ75MUpUJIMPvLrqTSuhw2DRUKAF5xDwAD2qfgkXO7w+WwoazW2DGSCem2KUo9jZgGfM+Xm3DLR+tRVuPj83GaWBiZBVWae5ddVI0l+woMVo947FBKBQDO79MKPVol8s/+gMzdX34dV5lD5/7i3wnKWf4TdH50AIglhDgAxAHIAzAOwPfq958CuFz9+zL1M9TvxxNFJV8G4GtKqZdSmg3gAIBhTTR/Cxb+sHjom214Zs4eQ9FiQJKj7rkeykXEBJvov3fohKe+SA8AftxspKcXg+1frTuMGp8Em40E3TnqOdx2m4aNmFI1kC+clxCC1DgnyqqNlsoO1TJhjMeihbRfZVf2BYL3xixrzuuXkFOsZRae/PEGTsnCICqVSJaDqAT8kswbm4nWpCQH77n+cPpA/WkbU6GUHgPwPwCHoSiTcgCbAJRRSpkNexRAW/XvtgCOqPsG1PHNxO0m+1iw8IfGrK3HcLg4Ovrz+kIffA+oFkA0CDXObrJq1q/IeZFeiAIPpkz0VlONT4LdxliKg5aI22nD0dJaw/5OnRBNiXVpUnwZGL9WjMoj5lcbZilQjuGTglac3m0IAAt252PCK8tMrwcAJp+ZAaBuHR5tOqXiUWMqYgKEX5K5C1BvqTD3olJRfxr3UyGEpEKxMjoBaAMgHor7qjHPeSchZCMhZGNhYWHkHSxYOImglOKBr7fikrdWNup59JaKJNOQFogePpVCPpRrS5Rf+jFmlop+HoB5zYidEMPK2+2wI7so2NOEubP0FlJSrANVYVKGWSbZ3V9swiPfbVPnqnzn8cvcQjAj4gyHcT1b4MlLzgBgXkgaCuI9fHvJQU6qqe/UyeI0eu8WD9Tzivo6TbveOBnurwkAsimlhZRSP4AfAZwJIEV1hwFAOwDMHj4GoD0AqN8nAygWt5vsowGldDqldAildEh6errZEAsWThkw37kZO3BDQm+p5Fd4sOpA5P4pQNBS0acliynFymcjDUmk7C927IW78w3fER5ToabcZQCw8ZBST6MPqCe4HYaOi1oE58PccewIHr/ELQSn3YYhHVP1O4eEaKl5I1D0//LX0fxv0bKo9UtccYrK1i/JPIvMYKnompqdtpYKFLfXCEJInBobGQ9gN4AlAK5Wx0wCMEv9e7b6Ger3i6lim84GcJ2aHdYJQDcA65voGixYaDSINRfvLzuI3SFo0U8UektlrUlDrrO6NTfdt6hSCYyLgvurO4KpsEyROO02rmgYuPALY6lQSvHKwv2a7S9c2deQ/QUYiwcZK7DeTZUQ4wxrqfRunaz5nDF1DgrU6/QGJK7sHHYbvr9nFPb+53xse/JcnNEmyXAsEWJgP1JPlr7tgnMIVawo1rX4JJlbTqEC9ZxQ8nQN1FNK10EJuG8GsEOdw3QA/wTwMCHkAJSYyYfqLh8CaKZufxjAVPU4uwB8C0UhzQNwL6U0etvSgoVTFOJq9vm5e3H5O6sa5Tx6+cbcPyLeu2mwaT3FLLXXivhdWkKwfoMpErMMJybaQloqEsWRklrD9m4tE7XZXzZtsR8LtDPEOrXXY2apsNX8A+O7mTIMMHj9YqCeqOezIznWaXCz6WHmLhschaUTyrAI5f4KFaiXTvdAPQBQSp+klPaklPahlN6sZnBlUUqHUUq7Ukr/j1LqVcd61M9d1e+zhOM8SyntQintQSmdezKuxYKFhoa+kC9SxXV9sSdPawExf/+zV/Th2+LdDgzqkGLYt1TtmSK6v8SVMNtsJlD1ld96DrCl+wpMLQqnncBmU7mspKCQZMKzS3qCZnyzBLfmc1KMA1VerVXD2I/j3fawQtcTkLgw1ytZfUKAHqJiZdxoP9wzKuw+QOjAuuj+8gnuL71FeOvHGwAo91mmTef+sliKLVg4xaCnmq9rYLi+YEpFv8KPcxnFRJXX6BQQhRZTHGZUMPqYyj1fbNZ8//isXbhlZEfDfk67DXYbgV+S1ZThILU7YMysStPR3ye4HfD4Zfy4+SjapMRiROdmqFGVV5zLYZoqzODxB4sP9ddklg0mQlRCH986lDcxY0h0O1BpokSjcX/5JZkrrXA6Q6Y4fd1fFiycrvh4VTYyps7B/+bvO6Hj6C2VUAHphgajl4/RKRW9kgGCFewabitSV6WiWCnzhP4gDIdM0qmddhtsqvtLdOcwF5ZeqTRP0CoVFqt6+NttuG76WuU6fEFLJZxy8PglQ8dGcV7hIH4f73agvdrEjGHNo+NN99MrCUKUPjFiOrcvEDpQL+K0d39ZsHA6QVaF3IwV2QCAt5YciLBHeOjJESOthBsKQaWii02YsA3X+iV8sfaQRsDZNZaK8n849xdAQ9ZtmG11qZZKsE5FLVZULZVL+rfRjNe7v1J1lovHL3HlGOdyhFXeD3+7DVUqGaU+qyxSP5RISifBbe4wMlMSDjuBPyBmf9FgTCXMaWSLpdiChT8OLnh9BXo8VveQnixTQ1ovYOyIGEkoAUBuWS2yCqvqPAcRzP0V4zAGuM3w2M87NYV46YlBIV6ruvD0VeaA1lIJlQ3F4ixiPMdhJ6Z1Kiwkc/mAttj7n/PRQp1HvE4Z6l1q2UXVPHYT73JEVN5zdxyHy2HMZosUqA9FHClizbRx2PTYBM02MyXgtNuQW16LF+ftRWm1T1enEsZSoRRRPEYNAkupnOKo8PgjNjOyEBn5FR48+PUWU+rzE8W+/EoEZFrn32n0i4sx6oXFhu16S6Wk2ofu/5obtsJ+1AuLMe7l0BXd0YApFbfO3VVuwpfFwNxHndPjNW6zcrVyvWOzOMM+YqBeXHWLYPEW0Upy2m04VlaLnccqUOUNGNw5MS4bYpx2LP7bWPz+yNkGIatXzqU1PpSp80yNd0a0OI6U1phms0WKebmisDRbJ8caLCszd5XLbsOKzCK8u/Qgluwr0ATqI7m/Tuc6FQtRoqjKi35PLcDbJ+hO+SNg9rZcrD5YFHlgPfHaov34eWsuZm3NbbRz6MXjJ6uycaAgtPWQW+7BcYGzisGsQM4nyfhoVXa95lUZ5cJE7/5iMuqnLeHv2V1jOmP+g2M025hL6uGJ3Q3jxQ6FXsm8CoC5xcR4jstu4y11AW3zLeWzYlEluB2GTDAz1HglToWfGucKu9IHFCVoZnVEinlFY2mawUwHiIrbrzIXu3idSuhjndZ1KhaiB8up/27T0ZM8k8YFpRT3z9yCGz5Y12jnYAKnKmxF9YlBlNsev4SnftnNA8LRQpYpXl5gHugXU4A35pQgY+ocPP7zTs2YFZlaGqK88lr0fWoBPlqVE/Hc3P2lCq5offBV3oBBcDKvlrlAZTQtFEdKzK0vRkkiWk0OO8FVg9rxz3q3nFlCQTjU+CWeiaXvkSLiuqHt0Vy1IswtlRN3f5khyE4Q3KbvYhmuol6EFai3AEBoN9rIdB0nG8fKjIVuDY14VQCZpW42FESCREZcGI277WBhkDZ9Z245MkNYNyJtC3MLpcY5NWNu/nA9748OAAUqJfzPW0wZjDSo9UkgJCg4Q61sWya5edxCPy8G5r4ycymxTZsPleKqd9cYvgeCzMFi61yn3YZJo4JxkaQY5dqfu6Iv2qXG1llors0qxkvz9yHWaQ/Z+hhQFiTN1CC/WYFkJPdXfS0Vdj2idRInKFKfRMNyf4mQafSLhBOFpVROYbAgbni+oj8+RDLAxkKi+jJ+HMKFJMvUECCvK0RLha2Ao1k9j395GV5bpDDlmlW1M4jC+4w2ych54SI8fG4PwzhRSce7leMVV3lx84frcDBMML/WL/EMKyAopB6/uJdmnEyBi/q1Np0XA3NfmfUeYSvw3HKj60+Po8K1OO1EozgSYpTf9IbhHbDyn+MiHkuPr9YdBhC8R6EQ77bzmhczSyVincoJur9EpSImHyjUMTQqSwUwj9E0BiylcgqDCSkzttbTCfpisMYAC1JWegI8diBi6o/b0fPxeSd0DsYTBQClat8Ofc1HKGw+rHRWDEeNLgrvTYdKkTF1Dh77eYchg+xoqehSCgrwFZlFeP63PSGPX+tTlIq+J8rgjmmacbJMNa4nM2HFLBWzgsJQss3sOCL9PSFEE78IlZVWV0R6veLdDq54zKyOSDGVE3V/iQsTUXGwdOggTUt4paFPqW4sWErlFIbIjWQmCE8XNIVSEfmSKr3GlfW3G5W4lVmKLwOl1FCYGAolqvvL7YzuFWOCIVw/kxqfxAPuybGKQI03qcYWe4uE4tcyQ61fgsth4/UOTEg99vMOzTiJUu5OBIAXr+pnOBa7j2areHbcSh0RZP92yYaxz13ZV/NZPB6zVE4UMRGEfrzLzn8ft8nYRnN/Eeb+UvenwJwdefx7FndiltDWI9qWz3pc3Ld12O8bCpZSOYUhCoTCSm+YkX9siEqlsdKnRWqLahOKET4uDIvsywv2o8dj81BY6cXcHXmYtzMv5NjSOri/gKDgYcovlJxiwfSuLRKR88JFmHZBLwNPVpnQiEpv+YS7vbV+SaFCEWjrZZli5zEtR5gkUaTEKvGMQR1S0DIpxnAslv0VTqDq522WfdUuVZuSLMZoEk/AUhGNos4RMsXi3Q5+HabZXyGusWWSEneqL80OU+7M2m2mYwhg8TqHnaDS48dzv+0Ne7yGUsKRYCmVUxiiPGAvabU3YNpn4o+M+QJNR3UjWWRapRI6RqWvERHxzUal0ejQZxfhni83424dZ5UIpihDuT70wp6tgBntyYX9zFeVFbXK3DcfVtxfj/60Q1OACGjdZPrz6Onuewp90BnlBxHcX34Ty0miFJ2axwOAoTc8g8yzv0wsFcEVKcJM9Or3F11k8SegVJoLNSGvXTcg7Ng4l4P/jmZKMhShJLvVZnGlaJBXpsScbIRgxi1D8O6NgzTfswJTu43wxmShQEjkyv+GgqVUTmGIq3YmHGasyMZfPtuo85v/cVFW48P+/GDwuKYRsrMCkqyhTgmX+BDOvVWXPH9mLYTqpKg/j8uhtVQ2ZJeY7sdcRmlqCmys0244h6hU9O4vvXevb1uty8lpJ3wfGyGmPetr/RLP/jKrswHCWyrsLurTu81cZU6bDTP/MgJPXNzbcLxo41UiWDEmUypTxnbRKBgzJNTTUmH30V1P99cqtW6rpNqLCb1bonVKrOb7WtVSIYQYFgt6uE2YABoLllI5hSEKAPaAju/VAn8/rwdSwuTV/5HAXCCs0VF9nV/V3gAyps7hGT0ilu0vNIwNhZowrrG6ZM+UqEV1oWJh+gLHn7Ycw5K9BXy8vrqaYWeukmqb0TweOS9chMcv7m1w2ZXVhLZU9O5FvZwRg9+JMQ6DFaQcQ1EAF/VrjQ8nDTGdJ8/+ChNTKRbcnkM6pmLqBUqWmcgubLMRjOzSDLeN7gRA+xvUx630/d2j8M2dI7hrSe9eM0Oc285r9cvhAAAgAElEQVQLDM2UpFmcBQifARcNUmKV+8ASdZbs0z7HzBVqJwQJbgeuGNg25LHCZRU2NCylcgpDNrFUCio9+GBFFo6VNn5tR1OA0bynqPUWdQksi2CV61+uOwRAWfHX+AIorvJqhBcAVJvUjjBZNfZ/S7HtSJnpOeqy0GMxlVBKxWNiEU3+ZAPeX660CwolqB76Zhu+33SUFz9O+3GHwZoIb6nolIrO6dQ8wY3mCW5MvaAnPr9teEhLq11qHN6+YRDG9mhh+j2DWWaUmW5+4aq+vBYkXODcoVEqdRdf6YluDO/cjNPDdNAxBl/Svw06p8drtiW4g+4vM0sl1G/F9Hl9A/UJMYoi4PSb6m83uqvSjZM9W0VVHsQ47XhoQpC9gPVtYahvBlp9YCmVk4RDxdURC+PMlMqCXfkoq/E3WuMmERUePxeOjQWProdHfbOn88oVJdtKDRrf+vF69H5iPgY/swj/+H67ZqyZ+0tMx/xxszmDQV0sFZaR5Q9xQWZULC67DZsOKRk8odxKAPC377bx7112Etb9pdcJ+hCJXlGyOMXdZ3dBh2ZxSIp14p0bBxrmMPmTDSHnJ8J0lW5yG0VyyXBuLdHVVN/6DyAY9G6VrLUI37x+IP596RmabSmxTq4Y4kzmpudKY2AZcPWd57ieLQEAHZopSo4tHlYeUNxizFL5cfMxlFb7cPV7q/m+r12rjROdyL2qK6wmXScJZ7+0FMM6peHbu0aGHENN3F83DO+A9mlx6NoiMrfRieLM5xcjIFP8ev9otE+Na5TVDostxKo0KuFSesPhYKFSQNkyWVEqqw4Y+60zmClzm41wjVZYZR58rktMRVKltyRTfLnuECpqA7hzTOeQfdUBpf8HKwjUWxB6/LItFzkvXAQAWH1Ay5lWWOlVqM5txGCZrM/Rxmr0l1Sjs6xinHZc2LcNgC2a7aEsGD3MgtimlO42giQ1o+zifq3RPi0OS/YVmI7jxzmBwPOr1w7AnO15phxh+t85SVAqZini+lYBDCzO4QrTpjgc2H1il6kvzmVKpUt6AgoqvZo6Kf0CqKnaJwCWUjkpYIJzfYhgLB9nYqnIFHhp/j58s+EIvrxjuKHhT0OhvMbPV9vjX16GKwa2wavXGlesJwrm/mIrwPpmFC/eqwigaFZkZlaCKEhCuSvqIsRYNk5JtQ//+knh52qW4MI1Q9ojr7wWf/l0o3FegvXZLjU2LH3NkZJaZEydg+uHtcd5Z7Ti2+NddlT7JBRX+5Ce6DYoaTHGolyy9prEdrvlNX4UVnmxUscnZreFZhfWwyyILZ7RaSd4+4ZBPK138+MTkRLrhM1G8H9D2hv2baiq8JZJMTxOo4f+d45x2vmCysydFypeIUeRVh0OH65UXKG56nNgUCpq/K/GJxmUvF5xN1XmF2C5v04KwtVCiDAL1DMOp8MlNaZCp7Tah4e/3Ro2GM3nEZBDFh7qCwQjMdXWF0FLhbm/KGZtPYYej83Fcl2AncEvyZjy5SbsUoPWHr+ErWocJFJxoo0o91/S0bKI7xxzLX60Mhv3zwyu0CWT9NpQFDNmLAhe4Xz56qryzjGd+TYx9hMuZuawEWQXVfFxonXBMoQe/nar0jwsgpbWGw3/urA3/3vos4sw4ZVleOqX3Xxbm+QYjOrSPOpnOHyTLiVeca6gFNPiXWGVd1MIR7NzsG1mSo3FVEZ2bqbZzh6X+lr4LImFxU70SoUtQtZkFePa9xUONUKACb1aGi2VJuoeClhKpUmxMacEO4+VR+06YP51IOgbv3xgWx5IbJMca9jn9d8z8ePmY/hWrakIhylfbsKg/yw0/c4s770xChOZpSIqlQe+3gpvQMYtH6033edgYRV+23EcD3y9FQCwK7ecr8DNrBARLocN3oCMh77ZqqFlEQUde1mf/nU3Zm/LRcbUOZBlijwdV5XTTnDO/5aanseMboXFK1onx/JU3ulqYF6Po7oFQ9uUYIGhzUZ4jcLyzCJM+TJYL9Nadf+tyCzCvvzKsLQvgDFo3leoah+qC/YCCt1LcZU3eveXySpdvNd1TXNtirRYM6XGbqOZwmGWip4N4UQtFfYss6Pee05X/l3X9ATNb8Dqu5x2G2ZMGmJw4TWl+8tSKk2Iq99bg4vfXImKKAki//NrcIXIhEPzBBey1PiBWQYRGxcNI+miPYrLSFQWrHugmdAwq1moC3KKqjHoPws1/WHY6ivOGVQqkcAUEbMoPliejRinDSlxzrDFiy9e1Rduhx1ev4TZ2xTLi98vQViYJUGYrfhbJRsryRnM7h8LQO/KLecsvOHw+e3DeKr1sbKgQguXpCEuNAgJfz9pGOZaSilWHTDvb7M7r5IvOh78eoumeFUPU8tC2NSEXpmoYTZndh9NLRWntnCVIRpWgXBg7wb7CVPiXPx+uRzE9Dlg77LeMInUnbIhYSmVk4ClQgAy0kqSgT3UX6wN1mGYUbewB7kuLysTxIv35mPcy8vwy7ZcwwtCEL3bTsRri/bj2TmKcox3O1BS7dPUjbw4T6GWYJTeoW5HuZDxVioUFhZVebFg93FMPrMT2qbEhnR/JbgduHZoB7gcNs11sAI8onN/GSrRZWoooglD02X6uzJFI8Z99I2mRNz84Xrsyq0I+b0ZWiQFs5lqfJIh+0sP8TERBWY4i2DGLUMw78GzACiWkr4OSISZENZuOrW0ijcg4ZDQYXPbk+cCEOhzQnRjBEJT4oRKOY4ERifEFMVzv+2BTJXz7c6rNM0svGdsV9N5WjGV0xTt05RVpEizwgLMkcAe2Im9W/Kajv7tUwzj2ANYFzcBM7N3qwJsd16FYaV93bD2UbPCfr4mhwcXX1uUiQ9WKHTz6YlujOzcjAePA5LMaT7iXOEtlf5PL8CULzcB0FarHy6pgUyVvPwYp51bMXqw++J22DQuMpaFJRb5eSUZT83epdvfWJhpVu/CYGapPPD1VizbX4huLRPRt20SCDFmW4VCX9ViiQRxVVzrkyIuWthz0iU9Hr/edybWHCzmsTqRwkVEdlEVCCE4VlaL8lo/+rU1EkHqjx9qW6zr1BJBuWUe3CfE0ZJUvix2H82UCnMthXIJ1sdS8fgllKltnClVnt+Z6w4j0e3A9cOMCQwAMO/Bs3inTStQ/ycB83MuFSpjq0wYc83ALJAz2iTxiulDxcYgMZPJdcmS8QYkrMwswv8W7AegrCSZf/gildlU7DoYDhUePx6ftQvXf2DseLjlcCnWZBWjsMqLshofiqqCgWlep6J7LymlPAWYuetKVFp5Saa8JiM51qkoDNVSCaVTXQ4bvMLLz/bPULmshmakwheQuXuMYfryLENmmli5rod4bSI2HSrFU7N3YcexioiZbu/cOIiv6ndEabGItCvV3oBGSQ80WYQw3DC8Iwoqfbj+g7V4bs4ezN2Rx1v33jSig2bs+8uzcNfnG1HjDSAl1slb8oro3DzesI1hm8Cm+/GtwyJfVBhQSjUEmieKfF19EFOATKmYCecgw3TwXq+ZNg6Tz8wAUL+MtRinHa9fp2Rb9mydiOJqHyq9AUzs3RKfrjlkus/vewqwLqvY9JyWUjlNYZYRVCAQ8vkCMh7/eacprxdb3b+/LBjYNRNc7OF/a3Em+v97QVTz8vhl7M4L+vjthMCnpozeOFwRKFuPlGs6CkaC6EJg82JW2aHiGgx4eiH25wf7jbN4g75+wxuQNfcICLr9bITwrphBpWJ0MQFBK8PtsGv4xVghZECiOP+MVmiRFGPqQnt10X6N26y+zLOl1V58sjqHfw5nUE75cnOdikHnPzgG5/RswS2HGp2lUmPShIydX4yrldX6cER4Bi/o0xq9WidicMdUAMpzt+pAMbq1TMQFfVvh/eUHselQKb5YGxR2P04ZhbkPnGU6zxtnBBMwTrTe6pPVORjw9ELTBVZ9EKrLatBSMeunotxEsfdL6+RYPHFxb2Q/f2Gdzn+kpAb//mUXJJny4ybHOvkzfzREVmDblFi8NH8frlMXc/pAfVPxfgGWUmlSmLkimPsnu6ga3R+bi8/XHsLoF5egXLf6Y/uO6qqkLbrsNpzdPd1wPHaKY2Ue0458Ziiq9uKHTcF2szYbwYwVivISK6LDuXsYqGBpiBQl+eW1hheWBauHZaTxF+jdpQc1Y95ecgBr1dVXslocx/pGFFf78Ot2xaJIinEixmnnri19/Ef0b4scSuwe+WUZDjuB226Liq2gvhXKTDh0ah6PVkkx2K767EX868JeeP/mwZpt8WFiLwwZzeNAKcV29b7W+CSNpbLveFCJv3ptf6yZNk5TZMmE4qoDxfjf/P18+40z1mFPXiWSYhzcBVrlDeCGD9bil215mH7zENw0Yx0e+3kndwGlxLnQq7W5yy4UX1h9wBYvoYRtQ4FlxZ1h4oZkC6JkHR8fIaTOwvy+mVvw8aocfLYmB2/8rnQDPVRcw58bffEqA3NZsp9bn8HWhHF6S6k0JcwsFeb+WqqrHj5QWKn5zITDwPYpSHQ74JNkXpshQp/2K37+5/fbcdnbqwz7XPnOauwTrAYbIfhdtSpEs3nBruOglOKHTUdD1sGIQmzW1qCiyiqqNlCPsBfh5Wv682wVfeD6zcUHMPVHpUlUUqwDvoD2uhfuVubJLBWWEceCo8wNw/rH62sGylW/dUCicNptSiA/IJumT4vGSTTCwkzxVHj8GNIxFdlF1XDaiSklSbU3gPu+2oKnLgnWjETTEmBPruJSmzwqAwDw6E87eNq1Ht1aJKJ1ciy/X5Rqiy99koykGAcemtANAPDP83tiQ04JqrwBfm9XHyxG6+QY5Fd4cO85XQAoGX6AUk+lT2v/YdNRrM8uwfNzg30/TpRuaGJvhcqkodw7oQzDi/u1wfwHzsL67BLDnNukxOLZK/pgum4hEAozVmThxhlG9zAQrE0prvJhj7oIOFwSVCqh4lyR0FT96QFLqTQpZJni8gFtNNvYglpfF3LVu2tMx722KJNXuk/+eL2BckSf+vrp6hzucz5YWBWSLFHEXKG7nBhkfHHePszdeRyP/bwz5IpJVCpi4HLz4VLM36XtA5OvutNinHYupMO1PHU77NiZWw6PX8YQ1RUDKAJFphQHC6vg8Un4YdNRHrCfdmEv3TG0jzyLzwQkGXYbMWSHaa8t+Hc0MsyM0uNQcQ02qvVHTrvNUNAGALFuO3ySjGfDtP41O/3l76yGzUY0rqtQYL8rY3UOyDIvJmWo8ATw6iJltfzivL2o8kq4bmh7eAMyCICd/z4P8x4cg398v50TeuaolsOD32w1cK498t02XPP+Gj4WCCqDPXkVPB4QCgt2HTfUBTFhGW2afiSEo+L5ccsxvLXkAH4w4Ya7cXhH02ZlZnhmzp6QNEKMLFJsYCZTiuGd0/DG9QPx8eShuGdsF+6WjhaWUjlNEZApUuJcGrcVE8LHKzxh00uZshjdTXnonHaC0hq/xqUxY0UWZm0NBph/nDIKT/2yG5+vPYSMqXPgchADK6sZ9gjHFJXKuzcOQtuUWPgkGf6AjK/WHcaWw6XcBaVcT/A4YrHgKwszDedhlsuevAoe9A63crUTgsOq0BogBJ0dNoIth8uw41gFiqt9eHyWQovSr10yTwAIld6565iiZP0yhdNO4LLbQhZQiuo6muCrGX0HS4eOcShWUbwrmFHHXEtJMU58cMsQvHF9kBZnUHtthtUr1/Q3PWelx88TGsKBzf/CPko1+8Ld+Xh7ycFwuwAAvt6gWB8UQJ8n5+PGGWvxwz0j8bP63DEl2T4tFtcP0wq+/17dD4m67oPM/fjk7F14LoQSXZdVjJnrD2POjjwDg8Ev6rMXjoCzLkhWMyvNwJRGy6Tw/VeihSxT9P/3AsxcHywTuGlER9x1dmeNLJBlhRX60v5t0Do5Fv88v2dYiiezhUoT6hRLqTQV8iuUGIfdRjSCmsVKSqp9SIt3GXzpDCxQP6RjKvq3S+Z1JKKge2aO9qWcpVK6SBJFUowDqw+W4HBJ5FXsP84LUmg77YQ3Nrrny83wqxQnOcXVePSnHbjlw/X461dbcKBAUUSi2yg3DHcVAB74v+Wj9ZxfKhw9CSFBpSMKdU9A5tlpMU47T9OVKeUBdTFQL+LXHcdR7Q3AF5DhtNvgdiqWSqT4eHRKxfh61fhkPmeHjWh836O6KPEySaa498vNOFhQxeNImQVBYWonwEPfbjM9p8Nmw11jOvP+H6HA7kuRSg1zpES5709f2tt0/NOXBZl7Yxw2HlsoqfZr4hmM1frZy/tqFjAFlR4UV/kMDNHM/efQvRcipv20A9N+3MGP99OUUfj9kbMBAKmqEgiX1lwXZDSL5w3BAGgse1bs6vXLIYX693ePxCMTu5t+xzCup9IuoMYvobzWj2fV93b1gSKUVPtw1aB2hn46mw6V4HM1EaKg0oNMwdoTMaB9irn1G0VMrqFwUpQKISSFEPI9IWQvIWQPIWQkISSNELKQEJKp/p+qjiWEkDcIIQcIIdsJIYOE40xSx2cSQiadjGuJFle+o9BSO2wE/QUqDGaBeAMSYp12TOjV0nR/pnxemr8P244G3RThqFNY6qHDbsN7N2mVVbj6hf8KQVqn3YZWSW7eaXCaGt9gMRg2f8YSLB42Us8Xkevqh82KAtyZG7rSXKYUq9VuePr5M0Zbn5C5JclCogGj2TARtuNfXobyWj/apcbC7bBDkmlEGpJw3SMZInE+6aucF6j1SzGqYnv990y+khfjcaGIDV7+v/6IddkVluIIWpGdmwlHdl86pJmnAj8xK1i34wnIuGpQO+x5+nzMfeAsPPhNMG7zxOxdqPD4cctH63lhKwD8/dttms8MLocN246UYX12CTYeKkV+hQdHS2s0hb3XqsSSB1VB2jk9gbMLx6iLhN5R1vFEQozThtd/D1rVry4Kvgus6+Y9X27GNe+vMewLAEMy0nDf+G5hz/GP83vg9esGYP5OhYng4YndUVzlxQ0z1uGa99fgirdX8dTma4a0g1+WsWBXPp5RGTZCFd0+eUlv/HzvmaYN/OrL/l0fnCxL5XUA8yilPQH0B7AHwFQAv1NKuwH4Xf0MABcA6Kb+uxPAuwBACEkD8CSA4QCGAXiSKaJTESL5473ndMVPU0ahe8sESFKQs8rttMFuI7h5REfD/uuzS+DxSzi7ezqmXdCTp3eG0imizzW7qBo3zFin+T7aAGmtT8KRklokxNix/O/n4Iw2SSAA1hxUfMLMKrjr803wSwqnltk1A+YZTPrU3HBKcn9+FXezXDvUvADMJ0hcWaaGYPnDE7sbFDdznXRJT+CujVBFlAwZzULXYTCwbLdQVg279ueu6INze7fklo3TbsO7Nw7CP8/vycc2SwjtlmE4q1tzHC/34MctxyLS3bBYxuUDlG6BTEjf+skGJMc6cdWgdmH3f/rX3ej1xDxc9e5qQwHn6BcWw+2w4e/n9cC9X23Gm79nYlmmOeVLXnktLnt7FVeaBwuqcM8XmzH02UV84dCxWTzeuXEQz2o7WFCFdVnFqPD4eVV5t3/NxfNhYlDRIr/Cq+tHE7yPvhOkKWLYfrQcSbFOPPKdYm26HDbNAqPaJ4FSik8mD8XlA9vi4Qnd4fFL/Fk2e5zO6ZGONimx+HVbLs7672Kc+8oyzfdzdoSm0mloNLlSIYQkAxgD4EMAoJT6KKVlAC4D8Kk67FMAl6t/XwbgM6pgLYAUQkhrAOcBWEgpLaGUlgJYCOD8JryUekGmSp+LgR1SYRN6S3sDMnfN6P3OAPDNxiN4bVEmhnZKw3XDOvC8/FAWxwKBj6l1cgw/Jnswo1UqXklCbrkHh0tqMealJfh5ay4olMpjPdZnlWCNEGzN1dW1mPFysfmw/6PtO94+LQ5dhV4YI3QMsYBiRTGXCsv+6tgsHuedoSgV1mddPGY0rQS+v3skurVUzj2oQ+iCQmaJtQnBEcYU1w3DO2JXXjm/P5QC//xhOzbmBIsEY6JoB3vxmysR67TjzjGdeW8SEWLmEFMqh0uU52hE5zTcM1bJ4Cqv9WPz4VJ89ZfhfPzDE7rh9tEZAID2qQozxKRRGfj7eT005+jTNgl/O68HfrhnFHYcK8ec7XnYEiY5RP/4+iSZp5ozCp37Zm7GlC83czfbZ2sO4drpa7Eys4gzR6fEOdE21UiwGglrDhZrstQyVQucrXWuH9YBAUmGX5Jxbm9zL0IoLNydj9fVRIe+T87nnHf/+H47Jn8cbHL22M87DbVRH6zIhl+iGNWlOe4b3w0SpdzyTU90I13nHltzsBh3fb4Jf525BUdKarHfxD3WGISwZjgZlkonAIUAPiaEbCGEzCCExANoSSllaUfHAbBfsC0AMTfxqLot1PZTGqJXxW4j3Cz1BiS+Ug3lNimv9eO53/Zg4NMLuMAKlalUWOXjFb0A8P5Ng5EW58T/DVFWoF4pOnqQFonRZbQAwI0frgv7vVmMQXxRgNCV6Ib97DauKOLddtw0oiO6t9QW0nl8Ejx+RTCJ79Nq1crq2CwONhJMO05wO9A+Qs/yzs3j0aNVIj/erWd2wsHnwhe4HSmtxbNX9DFsZ77vTYdKcaw0qIApKCo8ASzcE8yWE5VEx2ZxPP4ioqDSi+WZhcgtq0WN1/j7ijT7jAp982FF4OeW1WpqhLKLqjXMD68syuQ1IeyJu2N0JwzN0DIZe/wy4t0OXP/BWsxT3TtFIZqeAYBeV4pZkKwJ1SMTtYqrjcrY3LdtMBFjbPd0njllhsz8SgNHmccv4foP1hqy1ACgR6skpVlYahwmvroc3R+bq1Hs0VAWzd2Zh1cX7YfXL6HSG8BL8/eFHPvJqhzDtidm7URBpQcrM4tQURvgCyRCCK9XYzDrPmkjQEdhkVRR2zAZcpEQtVIhhIwmhExW/04nhJh3uIkMB4BBAN6llA4EUI2gqwsAQBWV2mBqlRByJyFkIyFkY2FhaPK7poDolnDY9JZKeKWy73gF2qbEQqZBIenjq1vj7XI7bPjPZX0gU4obZqxDSY0fc9UXPVpL5W/fBQPCfzs3fAAyEigUH7EI9qKkxkd274iw2Qinkq/2Snhv2UHEubQvel6Fh9dEmGVuZRdVQ6bgzaDiXQ7eZjYUXA6CxBgnr/x/atauiEWmSTEOU4uSBU8X6Fh+KQVev26AxoUpBloPFdfgkv6tTc9138wt+HV7XkTyTxZDYb+HqEAAxarp1DweTjvh/FdZhdXo3y4ZvVSLxyfJmvYMgFL388i321DpCfCAdG6ZB7eOzDCdR41XwtCMVO7SEWNZLF2eLR5YoL7SE8Cr1/bHWf9dgmNltYh32fHz1lyMe1nr8hExY0U2Jn20Hov35mP5/kKMeO53/PMHrTIprvJyNotmCS54/DKyiqqQXVQNSoGftgRTiR+7SJuqLsLjl3DFO6v4+2wT4qjPCMzjIg6ZJNDklXuw+kAxbvpwHQ6X1MApdJAU3a+LHh5j+gzKVHvcUB1NGxpRKRVCyJMA/glgmrrJCeCLep7zKICjlFK2rP0eipLJV91aUP9neZHHAIgO9HbqtlDbDaCUTqeUDqGUDklPN1ahNyVE4WKzEf7Z45e4+ytUtfbmw2WGDK9qn4SyGp9pYeV7y7Lw+KydeGfpQSS6HYh12nlTrmiVygrBF864weoKlqHjC8iGFR7LUurbNrQbKRSaCTUt7y49aCgGlWRquqKs9Unokh7PlVCO2vAq1mVHrNMetpBu7/EqHC6u4felpMYXsSFa+7Q407YBqWpAVc9UQClw2YC2iHM54LQTfDJ5KKaMDfbS2PjYBM5ga4akGIfpiy2mlTrsBAFJxhFV6OhdlXYbwf8Nbge/RDG+Z0t8e9dIZBVVY9vRct56wReQecCaWU61anbbX87qhOPliruqqMqLVqp1MaJzmsZitROCf13UG7P/OhqA1kXKLJUX5ykrfLbf52sP4aFvlMXOzPVHYLcRNIt34YUr+4a8Jwy3fbIReeW1OF7h4ZmQrZNjUF7jx+BnFuFHNWOywuPHoj352C1w3omxsSw1tdkvKYWy3208wmtLjpd7sOVwGVYfKMbwTmnw+CSeXDNjZbZhTs0TXMguNLqr2iTH8FbFgzumauJcyYLlOuGV5RGvGzBnNW8MRGupXAHgUihWBSiluQDqVdpJKT0O4AghhNm04wHsBjAbAMvgmgRglvr3bAC3qFlgIwCUq26y+QDOJYSkqgH6c9VtpzRES8VOgkrFG5D5A1SXTnH3z9yCAU8vNE0jFHHpgDao9Ut8RahfyT44vitnUWZonuBCqygLukLhyoFtkRKrCM+ATJEYo7VIEmOcWDttPPq1C58S2j411tBPPJq2AWY9Y8pr/ThYWM2Fyjcbj8JOgKd/3YW1WSWaF9YMWwRCxDvHdEbblPC+/F25FZwBWgT7vX/TBVHZTAe0T8FtozthbI8WOLNrc9x9dhd0a5GAF+fthdthQ5+2Sabxt0pPAJGWDF6/jN15FViTZZ4auyu3ghf5rc0u1mQ7sd+QWRIX9W3NXYppqqJfuDsfu/OC9U5vLVbiCQGZahTHsswiXP72Kvz1q81onuDSUPczmh9W1S+m0YpFihWeAEZ2aWbK2s0g1lJVqQq5Txvlmcsr92D29lz0ap2EZPVZPV/tRrk2qwStktywEW3jtOnLs3CgoBLd/jUXvZ6Yh79/vx3/+knJjGSu3EMlNViXXYK+ETj4iqp8/F69cf1A/i64nXYeY0yLd+HBCUFPQX3cOMNMmq41BqKVXj7RJaXGQE4E9wH4khCyHcAAAM8BeAHAREJIJoAJ6mcA+A1AFoADAD4AMAUAKKUlAP4DYIP672l12ykNUamIlorXL0e0VMJBZFeNNank/lKtnJYpsOpAEa8RYRlIr/1+gNcqMDhsSt2GPihYF2w5UoaxPRXrsGerRO4PZ4hx2XHO/5biR5MqZRFHSmtxULeaqwvfk/gS6kkrAcUN98Xaw5i3M0cNSosAACAASURBVE+T6myGnKKgS+GHTUdxsLBKkyZuBrMqbFbwqW/pzBTg+X1aYdoFvbAisxBztudhV245Mguq8N3Go6jxSdh5rAKVngBuH52BTgIrcDQCZ8qXm3HpW6sw847hmu2tktxYPXUchmWk8T70+mrsf13UEw9O6IYkVblkNItDs3gX4lx2vmjJKa7BOT1aoGerRDx/ZV++ih/RqZmmi+WG7GI+/u6zu+BbtbhyYPsU/j54TKzqv5+vdcX+uj0PF7y+QrNNkinnM2M0Nxf1a82b35UK7MaL9+SjRaKbu7/YfGWZKj1MHDYNmSsAFFYq+7OEizw1eSVUo7grB7VFvNuOCb1aaLbfe04XrkjshHCrLbuomseMXpq/T8MUXitYtyv+cY7p+ZJigwuOjs3i6sWWXB9EK72+JYS8DyXz6i8AFkER8PUCpXSr6o7qRym9nFJaSiktppSOp5R2o5ROYApCzfq6l1LahVLal1K6UTjOR5TSruq/j+s7n6aEmGPO6EUANVDvtOGFuXv5qq4uyBYEnY2Q8HQTm4/iVjX7hLll7hzT2ZCqWOHx41BxjaGLXN3mVY1an4T7x3XF3AfOwrVDtVXWWw6XodYvcXqPaPHU7F116u8khpxYGi0QdKk47AQxTpupb1sPsaizuNqHia8u19QOMYgvscMGtNNlJ+lTcV08U015HrYdKUNBhQcz1x/Ga4v2c5dbu9RYDX/WhytzDPQ/kcDYgad8tVmzvaDSi1EvLAYAXD+8A24dlYEPJw3Bb/cHGYeHdWqGByd055Q6by89iAcmdMNtZ3ZCF/W4nZrHwe20YWLvlppgcV55raaLZTshMaKoysdTxs/ukY7c8loEJNlAMgoAL8wNBr1bJbsxNCMV/770DE09xkVvrMBFb6zU7CcJbkhRSC/ZV4hl+wv5QoXda0mmKKj0mqaY6xcncW5FASwP0bQsM78K1V4J/770DM32vm1TeILIvV9txm878jA0IxUZzeI0sbQL31jBY1hVgvvzrP8uAQB0baFd64uB+UPFNab3sTEQlbiglP4PSuzjBwA9ADxBKX2zMSd2ukLk5rLbCI+FsEB9QaUHFVH2WBHBTG9A6bD46IU9Q44Vg6txLjvO6ZGORy/spaEMAYCrB7fDJf1acybl+mLL4TK8sfgAv9Z3buT1q1yol0awDvT4cfPROlHxt0uNxfajipC+bXQnLuC5f58A/dulRBVrihEswXvGdjYdM7hjqibmM6FXK4NS0bcUZi7JqtoAejw2D5e9vQrvLjsIGyHILKji5zXLpmIcXZHA5jRIrXPS90JhMnl9Tgn251fiqUvPQM/WSZriwkqPH498uw13f76Jb3ti1i7IlOI6ddGQXVSDeTuPI97twAKB822Frl5FtKreWxYUeq8tysTHq7KxIacEk0YZ67bEuBcBweMX98aTs3dpWlX3bpPE08cZ5glJEVcMNCaLMqucuUbD1fvon9lHVZ650hD9Xf5ylpLbNO3HHTirWzBT7fGfd2COwLcX67Tju7tHYenfz0FqnEtDNTRjRRYkmaJIFx9x2gkOF4e23Cf0aomrB4evPWooRFQqhBA7IWQJpXQhpfTvlNK/UUoXNsXk/shYvr8Qmw4ZvXHiSspGlJRiSikP1PslGlVNgh4FwkNmIwTNE0O7rESrQJIpUuNc2H60jBNVMqw5WGxa7xAKoWILMepqq8djczFr6zFNGuotIxWBEY73zAwVnkDUXRMnj8rA5DMzcOlbqzDsud+xPrsElZ4ALuzbCn3aKsKSUIJ12SVRKbfxvVryWo13l2aZjklwO3igOSnGAU9AwlqT+EVWYRVm/mWEZlt8TPBetEyK4amwbLXs8cu8pgQA7hZShZuHyV4jIJh+8xDcP64rVuhW00xG92uXjO/uHolhGWmm3QNtRGFP+GHzUU6MCQAf3DIEI7s0w6PC4mZMNyUOtOJA8FyJMQ6M7RFMlvl+o+IWfPEqY5B9bVYJrv9gHT5dbWxK1Sophmel5ZV7cOlbCvt2q+QYfLYmB5e9vQqXDWiLMd3TkVduFLY9WyVijEnrCNacjrkmGUURAHRrkaC5v6IiYM3sxH31YM/r8swiFIThKhNrtdqnxWHO/aP557k7j6PPk/PxveBOHdE5DZnPXoj3bx6MNikxGguZvZPtUmN5rKexEVGpUEolALJatGghStzy0XrONPzA18H2pHpLRaIUkuq3ddpt6JAWi7Io+6CEQq1PMtCOh0KC2wGn3QZKjUR5RVVeHouJBqEC53Gsq6OaCi2u9Fmr4QyTToEjOqdFRYAJKH79Md3M6xT2HK/QXMc1769Bea0ftT4JafHKNSfEONAlPT4i2+0jE7uH9U+zgsoEtwOJauZZv3bJhpRdhnEvL9MkEbRJicGEXi0xXk3H7ZqeoKmsV45t17gy3luehfvHKdlhT1/WB9cOMV+RUlDsy6/EG4sPYI4QuAaA928ejNvO7ITtR8vx9C+7kdE8zlD3c3b3dPRqnWRgQbhpRAdM7N0S//5ltybD6GhZLebuyOM1Mcq9SNEWPBKln84VAyOvom8WOlAeLas1sCrYbQTjerbAkZIadGuRgEkfrcfV763B1+uPoGu69vl69oo+prEzZrmxn1dk1p5z/1k8uA9Aw7Y8Z0cezn11ObYeKYPHLyFGZcdgiHXasEWtCYpx2tBb6DXTU9d3Rn9/9YkjtbqknLVZJciYOgcPfL0FuWUezXt4rKwWmx+fiMcvNud0awxE6y2vArCDEPKhysP1BiHkjcac2B8FlFK8vigTBwqq4PEbe4J7/JKGOVj82m4jkOQgr5PDTlBW4693V0EGvyzzBzgSav0SHHaC/u1TcMEZrXn6L6AQ34kFlKHA3p1ACFIi0S/ssBPEuRz49LahmhiOWQyoV+ukqAgwAcX66qzLDot12rBm2jgcL/fwNFiGEZ3TsGRfIU9w6NoiAW1SYg1V9nrcN74b1mYVc2vvBl2/cGYxDu6YijdvUFiGV4agOWe4YcY6vgL+71X9cd/MLWiXGov3bhqE8b1a4Lqh7bHkb2P5+PvHd0PLJLcmOeANNQ73zK+78c3G4Cr248lDMFZYkbt4LZTWMnx2zh4s2pOPe8/pApfDhm83HjUw/6YnujGuZwtDIskzlytWRkCXUZhdWI0Fu/OR0Ty4MNh3vFITcyip9uHla/pH9cwP6hi0cJNjnTiuc8tKMsU7Sw5ibVYx9uZVYEKvFrh/fDeVoFFrwR0sqMaK/UFXXJIui65zc2NHyjH/XYyl6twnjeyIV64ZYBhTXOWFNyDD45chy0o30fduGoSzu7fA38/vgXi3HR6/zHnegGAxLsNjP+/UUPybeQvSdC0iBrRPMSyIYtTfen9+ZZMF6YHolcqPAB4HsBzAJuHfnx5lNX68umg/JryyDD0fn4f7ZmoDn3piQtH9paQUy1wROe0EBZXeOqfxntMjHf83uB1eu1Z9yGn0/RMYO29OUTU+WZOjMd1/25EXcoUtQqZK6rCZpfKfy87AiM5BYeCwKSu4s7u3wAPjgxk8o0yqoT82qTIOB7FNL6DEqVonx2pcgwy3jMxAgtvBK7jthGBFZhGOV3g0Lg89VmYWabLOvlpvbhGuzSo2ZAuFw8guyvV/v+kIVh8sxqdrDuH8Pq1BCIHDbtNYbHeO6YJ1j07Aw+cqWflf3xl0n+nrTd5bmgW7KrAJCFcqFFRTt5JTXIPDJTUY1qkZpoztgqEZqQY37JJ9BSis9BrYhBm1iT7l+8GJ3VBR69es9pNjHZwgkuH1RZmmdTwirhvWXsMrV+0N4JdtuYZxH67Kxo5jFdiZW4G9xytx9aB2yCmuxqZDwUVW25RY/OOH7diXXwGHjWDaBT0NrqEDJnUjohK7YlBbQ4U+ANzx2UZuWYzs0gzzdh3H3V9sxrxdxzH2paX8HRGbrumZJvYer9RQ/DvtNozv2ULTddIrWCsX92uNn+89Ez9NGaU5DptHWR3jlSeKaAP1nwKYiaAy+Urd9qdHlS4Ooa850GdyTTkn6Au3qynFzFKx22wYlpFm6O8eCslqSmf3lol4SWWoBZTgZ7QLk1innTeTGtQhRbOiqfXLhv4VZkiLc8LlsJmmQgdkitFd07k7h5Mo/raHM8DeNaazJsAKQGMxRYKotES47DY88PUWHugUcaSkBlXeAM/YWZ9TgjHd05Ea58Jntw3D/AfHADDm9t/04Tp8uc7o4weA56/sy4PxKzKLUF7rR7cwPdhvEohDmYAc3NGcE/XpX3YJY48hY+ocTPpI6fV+3fS1IdNK12WXoENaHFolxWBM93T+G5XXBgxkpL1bJ6FHy0SM79US3909ytAwLb/Ci1+25WpaTAPg7lq9CzPB5eAdRBnO7NoceToL6PvNR7H9qNGyFun7GeULoLgYzYp99cbO0dJa3PbpBtzy0XqNwmujxhn8AeXde3NxpqFNg575QY9/z96NZfuNfWsoVTIpWyW6NRZISpwTQzNS0SzejTvHdMbNIzpiytguIER5/hn6tUvGk5f05s8fw4xJQzTvpqiUft2eh87T5hhYoPPVxdQ/ftiOjSGa6jUGoq2oHwsgE8DbAN4BsJ8QMibsTn8SHIngnnl/eXC1OmlkR5wh+GRtNgKZBmMRn67OwbO/7TGlZzdDopqHzromii4kfY/qUPhpyihMu6AXMprHo3vLRNNsl7QIFCpOh5J7//C53Q1m+dtLDiAp1sGVKWNjnS7cF/EeAcDsv56JGXXoY25m2j996Rl49doBmLU119R3/o0ac2IJAr6ABDsBnrr0DMQ47bhpxlpc1Lc1HjbpjcG6RQLgsYx2KbH4afMxbsXU+iX0a5eMm0caM5cY9NlgAHhfd30h6mxhVb7pUBmaJ7gwrmcLnKMGvVla6eiuzZEiuEs2Pz4Bj17YC2sfHY+0eFfYF/5v53XnPUNCodon8RgZA1NU+qwndt+/vD1YC7Muu0Tj/vpZXV3rOyE67UTDCuwXsvJCkX6aGTvPXt4HX985grdqSI51Yt9xJZW4qFoRulVeyaCkvlVdiEr/I+3zNbprM2w5Ugan+tyl6RZABZVe1KiWxIReSq1OWY0fndMT4LATTF+ehX35lThcUgNKtZl7x8s9+Pcvu3HHZxs41T6gpP5vV9PWB3dMNSyUurVI5Ikgt4/uhOuGtsewTmnokh4Pj18+Jd1fLwM4l1J6NqV0DBSG4Fcbb1p/HOgp5UMhxmHD3uOVmL78IOfpcXBLRXlhWPzAGWVhCKs1YM+LuFu4OhURsepKvbjKi683HDF9+OY9GH79kF/hQUbzeKzILDIU8hVV+bDveCUKK3343//1x0gdm/B1JhT2vVonaaqxI8FGCG4Y3gGdBLfVE7N3YXdeBQ+WjxYI+Hq1TkRrVXi67Mr1B2SlVuGVhfvwyeocFFb5MGdHnun9YK6o5gkuHss4WlarabE8tns6qrwBTOzdkvvr9df6wlztyjLeZef1Lp9MHqb5TnQPpSe6sfGxifjo1qH4ePIw5LxwEQAls+qyAW1433kAGPSfRXhZoNdpkxqL1skxGN4pjRcvAsDHk4diXM/ILLyEKC2fRUuSWbp6t9Yj5/bAgofG4MYP13HBHOu049L+wZqa3/cWYFhGmsFC80tUs4J/T21eN6JzmqHrZUYYd+We4xW4bnqwH3x5rZ/HHsoEJRiqQVj3FgkG1xxbxDGqlhJdttdNM9bxcyzaU4CCSi/uGtMZH67Mhp0Q3D+uK5onuDCySzNetMqeEeaqPVJSizs+5SV5IASYekFP/HDPKHx310j0FeJpt4/uxJXm2mnj8eCEbvh6wxGc0SYJfdsm45ye6YbFXmMiWqXipJTyaiNK6X4o/F8WdAjFXuoJyFiXXYLnftuL1xbtR8bUOdifXwlJpoZYhD61V8RVg9rivZsGoWWSm8c7WPyE/R/nsuP20dHxfU76aAN+2HQUNkIwsEMKL0YTV2elwsr8DJNmSG1TYuELyPh1e55mO8smsxGCu7/YhFUHigwUNKw9rQgC4PGfd5rOlwXSk4VqYRsheO6KvsgW3IYOG8HKA0VokxKLc3u3xFVCjv7YHi3QKkmxBPTsA2uzSjSuFjNhk8c5rbQKNCXOibE90tGhWRyW7i/EzPVHEOd08JV8nkldzQ3DOyAlzgmX3YZ7x3XFXrUgT5+eLWbMSbKMjKlzNP9yXrgIO546D4kxToMQfG/ZQe4aiXPZMbxTGvYer9QU73U2yb7TY+208dj02EQA2voWdn3DdQsGUSGzORVX+TTkh4v3FqCo2qsZm57gxieTh8IbkPkz9Mi32zDzjuGYPCoDF+sKGgdnhG6j9NRscwJHALi4Xxtc0KcVOqTF4enLjCzSAEytXFZrwwoQ2dQXPDQGt47K0FgYgJJuPPWCnujfPgWd0xPw8Lk98Ob1gxCncs0t//s5mky2l67uB0Dbj8hOCCaNzMCA9ino/Ohvms6TdwjveqXHjwS3A7eOysDHq3LQp20yfAEZ980MZqA2NqJVKhtVivqx6r8PAGyMuNefEPHuyPUWLAC9K7dCpZJQXrizujbnsQfAvGA8t8yD1xZlalhKbTYCSimKVSHnDUgY2im6fmUHCqpQVOVFarwLHdLieHxC9IKd91qQsO7ec7rqDwEbAX7YZOTyZAqWBUF/2nKMx2hWTx2Hz24bZtgHCN3UqmerRN7ArFyoFrbbCB7+dqtm7Ky/nomfppyJ5okuLNidz4PJgEIBwlx6fx3XDQN1nFFiHMlsKqLQFuM5/dqlYOm+QhxWldsl/dtgTVYxb9lrFth95rI+WPTw2dj/7AWYsz0P321S3C76+JTYBrlPmxQkuh0Y2CEFQ1WBypTLub1b4v/bO+/wqKr0j3/OlGTSe0IaKUBCKKGFjlRBpCooLuoCNixr+1lRsZdld3Utq7tW1LXu2ldUREClSO8l9IQakpCQ3jP398e9czOTmYQJJAzg+TxPHmbu3Dtz7nDnvue85fsue2AE717Xl+sGJbLgDrXGYcvhIqxWhfkrsvh68zGKK2v1Yj1oeqZuT7sgC6F+Xm4ViNp0uFKiAsieN57dz4xlUo8YYoItDt/DjmMlHMgv59nv1Zt/15hASqpq+duP6orRVmleXFnL4ZOVIIRTHHNppnNs41T4extpF6ieT3l1XZOFgYoCV2bEYTQIogK8uXOU4/WfEuXPZT1jCff3YsIrK3jvt2yHLKy7RnXi3jEpCCEY3CFML7gc/8py/u8/W9iZU8LQv/2sp9YD3P/5VrrHBun6Y6C66tIeW8jHaw+x5N5hvH5tHz2hx9fLxM6nLgHU+IoQgscndmHWoERe/3U/wb5ePHBJ08XQrY27RuVWVNHHO7W/ndq23z2Nl+3u9Fmwp15pCNQv33fCIbDpKh8mIzGEaRnxvDUzQ8/uMAj4ccdxvZNcWXW9g4zHqTAaBDV1Vr7ZfIyftc/vFOU6wBzg4vwOn6x0WYhoazHsEGDUbggxwT4M7hjOHSOdjZQQQvcZ2+skdY8NYlx6O6f9DaJBfNDGqv0F/GXhLsK1Cmn7DKQ/fbQRf2/1u4sP9WV8ekPhmrlRu2dXWXTXa2nWRgMOBY22WEFssA9Zfx7HP6b3ondCMLe7MMT6+xuEPkZboNtsFE4xMfsMoW5xgWx78hK+um0wn90yiOx543n92j68O6svBoMgNtiHH7cf593fspnwjxXMGpTIxzcN4PvtOXxoV6/zy+483U3qjlGx4WUyOLi6XNUSPaIZrOq6eno8uYhr317DK9N7MblnrIP7C2BoSgQjUiOJCbaw41gJ1XVWdhwrIS06UC+wXPbACC7rFUtdveL0u2istdU1JhCDUFeOjRGoLrioQAvrsgvpmxjKI5qM/Qc3OE9yXpjWg9UHCqi3KuSWVvPtlhyHicaB/HIMBjWL0lW7gZeX7OX5RaqT55+/7OfrzS6F1J0ywO4dk8Jcu9oSXy8Tcy7tTK/4YDpE+LP6QIGe8n34ZIVetmDraiqE4IlJXekQ4U+onxfRwWcmDNsS3L2STMDLiqJMURRlCvAK0PKy7wuQunqrQ0c9f4v7XsGOkf5YrYreve7ui5vvbQ3wj6X7qK6zcvlrK3U3QnFFLbd86JjKvPGge3UqoLqKTAbV/WVzxV2pzdzeu66vw76Ns3lATWlu7qK1l9SwT0IwGgT3jkl1WekbHWxhfHq0g5hloI+Ze/+7xWnfmjor3WIda3MPFVawNDNPl4y379ttpSFAX1tvZcbARIZ0DGd4SgS1VsVBx6uxUfnjgAROVqguhsb3EIOAy3rGkBYdoFeW+5iNvPqze1puNr+6twtFhau13io3D00mMsDi5P4a260dI+xWuUvt/p/e+y2buz7d5FCXAap8jq0Yt6WKBhnaCunmockOrXBt/OuXffq5zLm0s17cGOrv5VTcuz+vjH8s3ad3E02PC+LrPw1mQHKobuA/WHWQ/s8t5r7PtvCoZgQSQn2xmAxUa0oDtn3355cRG+zjspGZgppE8ensgUQGWHj2u516Zf1FnRwr7Cf2iGbG/LUOQqu2Hjy2z6qzKnyx4ajLotnO7QK4/5JUPXX+y9sG8eh41VB8e8cQbh/RkYQwX9Y9crGDYfzp/4ayPvskiXO+Y9Mh1aj6mo3MHJioF03a/q/Hd48mOcKPHnHBDOoQ5pAmPunVFUQHWSiprOWPbsZ+WwN3jcoSwN7J64MqKvm7p6Ze0VMUm6OxG2VEagTtQ3wpKK/R+yFsP1rM7SM66hfGlX3i8DIZnCpq/7JwF3+9Ip0o7Wb8bqP6jJZiNKgz469uG0y+5kKzmNUb3N5cx3z9xqmXoN7UGxe+2WMfJDS5SEJ4dXovp215JdV816jZVFK4n4NCsI3KmnqnrnpPTurKj/83VFdFtjdcZoPgjwMTWHj3RVjMRrxMBrxNBlbsc7zp+ngZnVxxH6w+yFebjjqtjEDVSvt68zE1OKvVNGw53GCgujSKR4U1Cp7aJOVdzbCHpkSQGhXA8FT1ZtI9NohgXzOf3zKQ+bOcM+XWPnIxG+ZerNewfLP5GNP6Orp4bBI547pHt9io2Fr3juwc6fL1n+3qm6b3a68bxS83HnESXDza6JradqSYFxbt5t2V2dxwUTJbHh+DVVHw8zbxyPg0ZmhuvVev7k1MsI9uGG2TgapaK4dPVjql94OazPDitJ4MnreE77fnUFJVx5Wvr3LaD1QpmMQwX266KIm/2snI7H9uHIE+ZrxNBr64dSCf3DSAxyc6V6zvOl7K9YOT9Guvd/sQ2mtJBde/t45Xf97HwYIK+j7reCsd/eIyvVrfNrYDJ8pIe2yhLg3TJyGE16/tzdwJafh6mQj0MfHb/gKHWMvFaVF8vfkYUYEWnnHRebStcNdXY1EURb+7KIpSJoRwTz/jAqeuXhWCTI7w40B+udvNr37ene+UFrg4M0/v/wGw/mChuqy2e0+jENx9cSf6JIQ2KVzXUox2N3p/bxNl1XV6oP7Z7x2bgrnq9bJyf4GeiWbDINT3mpAew7Q3VtG7fTAbDxW5rJx2VTRpO+dpGfFsOHiS7IIKauqsJIX7OfU8Dw/w4so+cXo8AtS6hnXZJ5msqfd623XNC/b1wmI20rmdepNftb9AX4FNSI9mcMdwNh8q4t4xKS5l8gMtJqxWhbJGhsWWhhof6sM7s9QVXlp0wyo2IyHEoa/Kv67t7XC8zXVqXz1v/x1dNziRgdrs+9s7hjjtY8+sd9fqiRw3DknikfFpenbhxPRobhqazA/bj3P3xZ24a1QnPaPJXWyrqcaupx7xwWxppif92K7RlFTW0bldAH/VJgI944MZ170dz33f0KVz+d4TvH99P4Z0DMdoEDwwtjOTe8YS6KPKCgVYTBwvrqJfUqieheWKK3rHcuBEud42OTHMlw6RftTUK9TU1yEELtPGQZUQ+vb2IRw5WeHg3u311CJ9ZTL1X6tY/sAIBnQIY0rvOH7aeZz7PtvK/ZekNrmKg4a43dzxaaw+UMhiu9bRALcM76BnvIHa0O3BsZ31lPPP1h/myW938sWtg4gO8tFT2e2VA2YOSuSnnbmE+nkRG3z2btfurlTKhRD6L0AIkQG438ziAqbOqmA2GlhyzzDGd4+mpq7eZcMs+8C3LZOnsYbP6C6RDq6i48XOleD1iqJn3jS+Fdv77t2deT49uSujuzSkkv56/3CW3T+CK/rE6YHAcDsXlKuY0SPjOjOkUziXdmunJxdM6xtPSVUdv+zOY39+ub5asf+RZZ8o5+GvtvH4/5wzvV7+g6oOEOhj5oe71JTmeQt34e9tckpgKKqoJbSRDEdmTgnfbj2mt1AN87PwzGXqbM0+5RbUFaKNBVtzeOjLbZRV1xEZaMFVukR1nRWliXvw9H7xxAb78Fct28rPW9UUM9nFTmyUNnKZxAT70LldgMvrZ+muPOZ8uY3qOvdENCemN8Qt3l6RRdJD3zPsb78A6qonPS6Yz9Yf5qXFe1tsUEB1/+x48hIGN1JCeF0zlK5qcEBNey+qrGVc92gmarGViABv3aCA6jLc+OhohqVE6CvF1QcKuOSlZdz1qZqQ8e7KbK56c7XL7EF7jEahGxRQG33Z/xZNBuF0DvpYBUx8dQW3frTRoY6lpKqObnarzhvfX8/mw0V4GQ36CvVvP+7mT43aCtiz+J5h3Dgkif+sO6xf6zb2PzeOtVkFJM75jon/UDPdgn29mDUoUc/S0xuBFajGqVOkP89d3p0MO7HWP3+fSV5pFTnFlfr7nA3cNSp3AZ8JIZYLIZYDnwK3t92wzh9q6qyYjAIhVAmMmnorsz9wVrCxXZIG0aA2G9/oh/fTzjzqrIqeRjl7qOu04Pkrs1i4/bhT6qi97z46WFVxPZWmUlp0oINrKMzfm/ZhvgghuLhLJKF+Xqyfe7H+enAjV9yjE7rgbzHTJSaIHcdK9PO0SaAfK67i81sGMjotiqv7t3dw+WTmuTtP8gAAIABJREFUlPDxmkPszXOeadpcGkZDg7SIQaixksbGtLC8xkESxWIycM+YVAYkh3Hj++v56rZBJIX7MVdLU7Y2WhntznWuibHNJF2toqrrrCguFqSzhybzydrDrD5QqNfrWMyq8nSdVc3Os295O+fLbQ7HX9EnjoEdwnio0XZArzhvrBPVFFP7xLHlsTHMn5XhNMGwpX5fmRHvkKrcEkxGA37eJif34JLMPDpF+rP03uEujztcWMGyPfkYhND7mfy003GWXllbz7srHdvu2hI8rtHcaDMGJvDg2M5EBngzwS7RojFmo4EkO+0xs8HgkJRQb1WY9e5a/bm92rAC9E0MYXz3aALssjr3PXupft6zh6o1Ipe9tpLnvs/krz/u5g3NsNonhzTm5g828PaKLPbmlTnF7To8/L0+obS1R9h06CRpjy3UXbSjOkex4I4hjNIC82H+3lzdv71DKvqE9BgSw/zonxTGK9OddcraCnevqCSgF2rG10/Abk6vo+UFR53VqhcrehkN1NRZm2zSA46CkmFNdFS09S/xMhmdGvrYcCVrYU91TT0lVXWn1FR6asFOdhxzbjAF6g+ysXZZTCND2C8xlIe+3Ma2I0UO4o8God4Agn3MXPH6Kv75634W7ch1kPVW8/Zd10fc/rGaV19Xr1BSWct9Y1L46rbBTOwZg7+30SENuLrOyky7yvW4EB+W7splx7Firunfnu+25uBvJyf/0z3DHD7rczu3GajB5/ma+6rx+YM6u/XxNvKva3tz87CGAj2bSkByhB/PXt5gPGzfS15plYMhcdUzPOtEuUsRTdtNrLyZGqbGBPmamfPFNiamx5D153Hsf24cN12UpNfsBFhMXN2v6Yr/0+G57zPZm1fWZEvsaRnxrH14FBEB3uzLK+OKPnE8c1k37hvj6IJqLNszLCWCL28bxPAUNYbj522ie2wQAzuEOdVH2WMyGHh3VkNWV8cofwdDaFXUmI/+OXay/IqiTpou7xWL0c4QdX9ikS5V8+ayBuP3wWpVvmdffjlbHhvD3mcvbXJcG7UA/Ec39sfHy8j/bh/s8PqMgQlkzxvPpB4xzP73emJDfHhwbGe9WNLHy0i32KBmW18P6RTOhzf2p09CCAlhfm61324N3I2pPKooymdCiGBgBPA88C+gf/OHXfjU1SuYNX+9l8lAbb3CjUOSeHtF1imOhM1N+J7D/L0oKKuhsLyG4krXcRNXvn57jhS518Bq65Fi9ueXO8jH2PAyGiitqmOknWKqfabb2zMySG0XwKqHRuozaG+Tgeo6KwYhKKmqa5gVKqqUfk2dVb/hlFbVMSA5zElB2J4vNh7hnRVZPDA2VZNdN7A0M4+r+sbrsZWiiloS7Op2usUGsSe3jAP55RwprKSm3sqTkxoCqf/6ZR9PTGoIXO54cgzrsk/q3TDfWHaA7ceK+ejGAS7TRK/p3x4fLyO3friR2+z6moC6WlmbVci7K7O48SLV4Nw0NJm3lh2gT0IID47tzHC779OeDQcLmxTwvKxnLN9vO+4gme4Oft4m/rP+ME9OVuVnHhnf8D18tPoQR4sqecxFkPl0OVWPGyEEkYEW6uqtXJwWSf8ktb3BVVrVe1K4H4M6hHGfJpZpY39+OVP++Ruzhybz8Lg0ftqZy9yvt9O5XQDtQ32bVLM2GQTHtGJVoxCcKKvGPszRuV2AQz3ItIx4Hvh8q/7c1qflQ01qpm/7QK7o7EtapIXc9IaMR18vI9V19dRbwdtUxrGDzWf8fTotnpLKWqoLDpNZm09VVS1vTVJXSXEhPuQd3s/ePXVMTAAwUHAki2GRUHr8IJlNL4BcUlpVR3FlLdaTllMKzVosFuLi4jCbT7+23V2jYrtSxgNvKYrynRDimdP+1AuImnqrntHkZVJXKk0JDroiPsRHLerSuP+SVKKDLNzz3y0cLqxg0c5cesQHOWQRgZpJ8uFqteZgXPd2LjNdesQHc+xkpR5XaIqmJF1s6b/2gdAQu9Tci7tEUVxZy6+78/WCNPvArU0k8cvbBjHln78Bjp30jhVV8nET/VpsYpv9kkJ5Z0UW3bWU4f9tPsrOnBJ255bipelDFVXW8tSChsrpS7q149Ju0Xy4+iBHTlby4Q399d7jAOuyCqmuq8fLaEAIwYKtOU6BTNuPLz02iIs6hetV1ALoGhNEtWZsdtqt8lY8MIKfMnPZfLjIodZlo1ZrUVJZy6bDDY2t3p7hmLWV5EJu3caYru3I+vO4Fsc/Hp2QxqIduS7rUIamhLulQt0WGA2qKrSPl8lBbTj7RDlZJ8oJ9jVzv13BXkqUP49P7KKvskZ3iWLV/gI2HTpJt1jHFgleRtUN3THSnztGdmJffimhfl4YDQI/LxNJ4f7cMzqFv/+0h13HS5m/Mot7GxkxG5d2a0dheQ1DOoWTPW88WVlZBAQEEBYWRnfg6MlKCitq8DYZiQm2kHWinMQwv1M2t8s+UU59VS1+QFpcMDtzSrBo11Qt0D7GQl6pOjEUCCICvcktqaJjpD++Xi2rhauuVeO8AT7mZo2KoigUFBRw5MgRkpLcU+RwhbujO6r1qB8N/EUI4Y37rrMLkr8u3EWfhBB1pWJsWKk0VQTVFPYGBdQAX1yID7ufGctn64+waGeuk0EB+PeqBsPVOABsw5aF87cr0rnfbvbVmKYq2K/pn4CP2cjzdtpRjfctKKtmzpfbdF+3DYNQi/Cq6+qZ8s/fCPPzoqC8xuH4YSkRRAdZXMqX9E8KpbbeyrCUCDY9OlqVevlgA1dmxPHFrQPZdKhIFxyMCvTm5qEdeGrBTnq3DyY9Lpjle/MpraojNtiHa99Z49BtsLrOSurchdwxsiNBPmbeXHaAEakNqbEf3tBPlxwxGQ38fVpPPe1TASIDvckvrWLBHYOZ8I+V+nFrsgpJjwvm4XGdHRSIbYkArzRSrL64i6PWVqifF7eP6Nhkh77TCaj/+ftddGrk8tFfm5Lu0CDsbFNdZ8VkELx4VQ/25ZWxNquQddmq0X1reZaDURFCcN3ghhudn7eJq/u354lJXfVEj5ggC8eKq+jVPlhNBxeCIF8zadGBeowrwt8bo0HorkdfLyNjuzkX1Nr417UNGVi7jpdQU15BYmIiVkVhh10mX3VdvR6Hc+UybYy/xURJVa0eeG+ckh/u74Wft5GDBRUkR/hhFAIhWlakasNkFHi5UVYohCAsLIz8/DObaLhrVKYBY4HnFUUpEkJEA/ef0Sef5/xT67xnEFCmZfGYtRmSO8SH+jgUVdkzpGM4099c7VIGvVOkP3vzyhxcZ/YGxhX2GlVzx6fxzHeOacJNGZWYYB+6xwU3u298qC+rHhrJEi0V2sdspLK2HoMBVjw4goXbj3PrRxt5YlIXEsP8HX4UO46VODTwsqeytp5jRZW8syKLv/24m9FdovhpZy4LdxynR3wwveKDdVdbcWWtnkm38VAR7QItLM3MRYiGfu72weoTZTX0Twply5Filu3J5783D6RLTKCuXOxvMTuM0156Z/Njo3nk6+1k5pQwf6ZjYWjn6AC6xgTx4k97MBsN+k0wPtSHfS6SEVxx3yWuZ8ynS2lVnctVrI3TMVStgRCCJyZ2IT0+mPzSal77uaGTZbeYQD68sXnP+pGTFVzz9hoSwnz1VhE287hGq9XoHhvEwu05Dq7RvNIq8kurWblfXXkmh/u5dP2CowDomgMFXPXmat6ZrPa4aXxrD/f31q81V7L8jQn3V+X7c0qq6NSoYDo9Lpi8kiq9Yr6ksg6TURDu5+22+rg9pVV1HCqsIDUqAG8XbSDsaY3rwd1+KhWKonypKMpe7XmOoiiLzvjTLwCsCvy6V7XsjaUWGmPfDtWW8mlfP2Gj3qqw8VARH605hFHgUANydaMVQXPcMzqFnvHBDn0WGteTgGPFuz378kp58n9qHw9vo4Hx6dF24pXqPrX1Vn7dna/Xldhu7gahZsRd2j2ab/40mK4xQQ7KqqAKMzYVT9l0qIjckmq9zuMPfeN54UpVnXbL4SLe+y1b/8zqWquDlH5mTgl/HJhIZIA31XVWZg1KpFOkP6ma9IzRKBieGskj49J46aqerNx3gn15ZbowX+M+7/YugxvfX6+1yBUOBnZghzDC/b2ptyqs2HdC12ED6JfYUNl9URMtj9uKuRPS9CLHs4GrKvammDU4id7tQ/TWyH+7UhVS3H6shNdP0eAsMcyPTpH+RAU0xDXmXNqZtY+M0p9vO1rMntwyzEaDXhMmEFTX1evXnasJlS2bbKudsoIt4cVmLoQQdI8NomOEP7HBPsQE+9A1JojIQIvL4lVX5JVU6UW09qn69kk4cSE+VNTUcayoku3HipstMk5MTOTEiRNO2329TCSE+rrdUuNM+V27sM6Ey3o21AGY7LK/miM9Logl9w5j82OjWbhDnT1W1znPamyvVdTUE+Rr1qtrw/29OO7CVWTjx7svAtRZ+V2jOjEqLZIJ6dEOefA2uRI/L6N+ITfu2GfjRFmNHk/57y0Dee3q3vqP0E87trSqjjlfbiOvtMpB8dcgVL/xiOd/YfJrK/n7T3uc3n9MV1UhtnER6I87jusuoJSoADY9OpqtR4rJLihn5ZyRfHHrQDpF+us/8IgAb72iOT5UlXZfm1XIntwy/jK1O/2SQnl5yT76JYXh720iMcyPvyzcxSUvLeOvC3fx8pK9rNx3grkTupA9b7yu1NxwLg0/xvUHT2LVOmva/0hV/34RRoNgzzOXcq9dNtNAuxvt3Re7LrRrK95bmc1+F10M24q7RnXitat7n3pHOz6+qT/rHrnY4Tr896rsZo+xmI08e3l3npzckB05uWcskQGOckEmoyDQYtInO2aT42TAVXHivKmqcduZ0+DecjXv2na0mOyCCsL8vamtt7LjWDFFWnzFHZLD/XRh2KRwP7rGBOq/q4gAb9Ljggn18yYp3I+Okf60C7Sc1krFbBR4m42cpeQvt91fEo3KmnqEUMX/bFknNtfK5xuPNHvsXxfuYZ1W8xHQjEaYv7dJL4zrmxDKj1oe/81DOzhVuDugVeQJVCG7l5eozX9uH9GRZy7rRlVtPT3jg8meNx6rVWHyaysJ9/fSpSMaY0tfnDEwQReYtAXabQYp3N+bVQ+NJMjHzJxL0xj43GJySqpRgMWZubqfefbQZKrr6qmrV/QfzoaDhS6zdjYfLtJ93q8u3acXuHWNCeTVn/c5dSw8UVatu0AOF1YS4uvFocJ8gnzMjOgcyY/bj9Mx0p/JPWP4YPVBjhdX0T8plIqaerYdLeYPfeO5fnASv+0/QX5pNZN6xDi4AVz9jk1G4TTLjQhQDXbjdNqJPWII9fNi29FilyvFtmRPbqlLXaq2orH8vTv4epnw9TJxWEum6BoTyMc3DTjFUTDtjVWkRPnTMdJfn3g1xmQQ+FtMhPp6UVhRQ7tAi0NiiqskFT8vI7HBPg5Cma7cQu1DffUUedtq/1QTS3tKq+uoqK4n0MeMEAKjELphzS2pIrekiuRwPz0GFB3UkL112WWXcfjwYaqqqrjrrruYPXu2w3s//fTTfPjhh0RERBAXF0dsx67MefABju7P5JZbbqGiooIOHTowf/58QkLcUzR3F7lSaSE3/nsd1769hh3HSpitNREKtJhYtOM4u48331jK32LkstdWkjjnu2alLGyB61uHdyAqyEKAt4nNj41mYAfXbXNtrM5S03ptrUZnDkwgwNvEt1uPce2ABD3FFVR13PLqOn7ene/QrMieyABvfMxGTAaDnnFiu2HaqpDrrKr761BhBYPnLSVHq7FZfaBQj928d11ftW/EnhPcbldlfOSk65jSVRnx+GmG2j6L5rbhHZ0MCqguyDVZDUWBuaVVTO0dS2lVLR+uPsQVfeLJLa7SlVyPFlVy00XJfHhjf168qgdCqNuufmsNd3262Sku5ipjxigE3iajQ7vh+JCmpTAiA7yZ98MuvjzFxKO1eXRCF4dmV+cycVrh3o5jJfzTDRHOf1/fj39M782QjuG6GGdjjNq1e7umhp0eF+ww23cVQlAU9XpYdaDhmrJNIOx3t8n9qO8jSI9T+6W4S3Wt1SkFOzOnhK1Higj18yLUzwtfTbi0uLKWXXb3l/nz57NhwwbWr1/PK6+8QkFBw1jXrVvHF198wZYtW/jhhx/YsGEDwb5mgnxMzJgxg7/85S9s3bqV7t278+STT7o9XneRK5UWYrWqN5mfd+WRpwXSwvy9XVbRN+Y/swfS77klbn9WUUUtARYTpdV19HzqJ4e+2bcM68Drv+532N82uzcbBf+6pg9DOoUTGWhx6L2y81gJ415ZzsVpkbpra29eGX0TnQ2WEILK2nrmr8zSaxkiAyx8d+cQfcZdU2dlzpfbmDs+jav7t9eFHUvtlGhnvbuOvokh+HiZHCrybTLoSQ99r2/rlxjCLR9u0A3jVRnxDOkYzoz5a/HzNrL1iTH8tq+A577P1Fc5fl5GPr5xAM98l8n6g4UE+ZjZeKgIqwKpUQGUVtdSXlOnS8W0C7Rw47/VdkBBPmaKK2sZ2KEh1tF4tunK5dA7IYQgHzPPXNaNMS+qgqB7css0aRdn/qFlfjVWwm1rFm4/Tm6pezVLnkYIQZCPieLKOj5Ze4iH7Pq9uMKmLnywoLzJ1ZgtMzMhzJcAbxNX9Y3XVyf3jE5h5sBEt8ZmuwSaij+eDokuGqMlhPpSWVuP2WjQ3bB+3kaSwv0cNABfeeUVvvrqKwAOHz7M3r0NLYlXrlzJ5MmTsVgsWCwWJk6ciI+XicryMoqKihg2TC3+nTlzJldeeWWrnY8NuVJpIasOFLA2u5A6O4l0V3LwrjhVllZjPll7iMqaOmYMTOCV6b24eWhDoZ19Z8d2mqyLTabFbBCM7BypNzuyVe9Cg/vqqF1xZHO5611jAp2kXrrGBOl+Yz8vE6seGknP+GAu7xWry7BkFzgG4NuH+rFsT76DQsDKfSd4pFGHx505pVzarUEq408fb2TGfFVGY2inCAItZn7YnsOhwgqmaTUL5TX17Mwp4URZNfvzyvAxG8ktqSLY10zXmEAiAyysemgUCWHqTNjbbODOkR3x9zZRXFnLiNQIxtil97pydYT7ezs0tbIZavtqfFfZejbGdW/HfWNSmm192xYE+Zjd9vF7mogAb7Y8fgnr517Mijkj3T7u9pGdePqyhmLWK+0abtlW1KPSotj25CWkRatxi7dnZHB5r1iCXATVDQbBHwck6B0YAbrHBbHqoZFNpnu3Fr7eJielDSEEJZW1ekzkl19+YfHixaxatYotW7bQq1cvqqrOnYmDNCqtQIib2R6BPqdeGDbOnukeF8xTk7sxqUeMHosAmPt1g9zHpd2j6W/nhqmotfLUgp16oaJ9NomtSNHf28hLV6kB/OZmX1//aTDbn7yk2TH/ujufK15fxaB5S/X2q6sPFOqy4QvvvoghncLo1T7YISZ0sKCCRTsa0l2n9IolNtiHXu2D9Zt8gObWmNIrVl8x2NxYK/Y3ZLrsyS2lXZCF8pp6auqtpEQFUFRRq2snRQVaKNTaIh8sqGB450hWzhnJvCndCfXzpriyliX3DuNNO2VYe9bPvZjrByeSoBmF2nor1XX1etbZ7mfGNpkeDbDpcBHPL9rjJCLa1vz9qp58ceugs/qZZ4KiKGQ8s5hXFu899c4afRJC9I6gAH+7sgdTesUSH+qjxyhyiiuZ9sYqlu/Nx8tk4OIuUXy45qCTHIyNwooah8mWt8lIdJCPx1KwCytq9Vqb4uJiQkJC8PX1ZdeuXaxevdph38GDB/Ptt99SVVVFWVkZCxYsACAoKIiQkBCWL18OwAcffKCvWloT6f5qBYJ9zLpeV3PMHtpBV2O9a1QnXl6yl6RwPz2YLYSzYKB9fYW9UbIXq/ty41Gu6BPHyNRI/rxwFxaTgZGdIzEIwV2jOjnIr3eLDSI53I+Hx6Xp7rKm6lTAvWKrxsKIAB0j/Fm6O4+vNh3jreVZdIz0p0/7EI4UNQTmr+6v9tm45z+b+XLTUb7cdJR3Z/Xl/s+36N/ntqPFLLt/hEMywdqHRzH19d/0Oh+DgMt7xfLeb9l0bheAl9Gg95G310a6pn8CO46VsD67kKcX7NSzteqtCn8cmEBPrateU5iMBh6f2IWjJyv548BEBy2lU60GBnUI52R5TbMJGhJ1Vh7sa24yecRdZg9LJnidF9knykkM92P53hOszSpk5b4CBiSH8d7KbN749UCT/WC+25qDoih6Bf/hwgou+uvPvHd5DM075dqGrtGBekBn7NixvP7666SlpZGamsqAAY5JDX379mXSpEmkp6cTFRVF9+7dCQpS0/nff/99PVCfnJzMu+++2+pjlUalFQjy8cLbZGDWoETeWNZ0fv0zdlIitttRgZ2EysyBicSF+DgUJ9obFV8vE30TQ/SqY1uVenFlLe/YaY35eBkY0jGcWquVl5fsZXq/9ozVXEr+3iaWav06pmkNgJozKqfCYBD8NmckU/75G30SQvht/wlOVtSydHceS+8dxsgXfgXUFOTFmblseHS0fuzPu/JYnJnLfZekYFUUvt58jEe/2c7tIzry6DdqfUxVrZWRL/zCvufG6cc9+s12DhdWMmNgAv9edRCrogox7sktZdfxUoQQWBU1BdtebcDHy8iIzpHsOl7KxWlRaudDq0LXmEAHKfOmqKmzsuHgSYZpooYt+dqGpUQwLOXsxlPOVzY/NuaM38PbZGT+yizS44JIDPfTsymrauuptyr6irkp12/mU2MdsvhsXVbPlihjY+zjet7e3vzwww9O+2RnZ+uP77vvPp544gkqKioYOnQoffqoK/CePXs6rWxafaxt+u4XINcPTnKSEvcyCarrrLyx7ECzN+hAHzNPT+7K+9f30/WO7JstbTlSpF+8NnzMDXbfalW4bXhH/WJvaiV+sqKOlxbv0QPOpU2IT9oqdl31SGkJW48Ucbykiu+25ei9XsZ3j+aH7cfJnjeexfcM5Yo+cfRPDuWG99bp0iAHTpTz445c/rpwNxsOneS/Nw/Ez8uEv8XEIC019eMb+/OcnVw8NKzSPlt/hLsv7ohAVQKe3DNWF3gclhLB+rmjnbotHiooJzOnhKGdItjy2BienNSVjpH+Ts2mXFFvVXjt5/28s0KdOJyuK+TNP/bRXY+StsH2+3L1e7Q3JE0txBt3/fSQ1+u0mT17Nj179qR3795MnTqV3r1bVjt0JsiVSgvxMhmobXQDsu9/3txM5s5RDT3oO0T4YzIKB5/u3twyp9msvctLAa57b53+3P6mNqZLFEnhfryx7ADdYgMZ1DEcIQSf3DSAyEDXwcVBHcKorqsnPvTMXA0vL1HPwc/LSFWdlXqrwt68Un7amcvbyw/oPd2vH5LEK0v2MvRvP7P4nmHcMCSJG4YkkTjnO0CtO/jf7YOZ9sYqUtsFYDLA1W+v4ZVG7YaXPzCCGfPXknWinG4xwcQE+9Ax0p+4EF8GnKJOomd8CO1DfXn3tyy+3HhU3/7ExK74nSIGa/u6m+uT4Q5jujatNSVpHWx1S7Y4hD32xsLLzSQGVynF5zIff/yxxz7bYysVIYRRCLFJCLFAe54khFgjhNgnhPiPEMJL2+6tPd+nvZ5o9x4Padt3CyGajya3Epk5JXoqo41hKRH8nxuV0g99uY3Hv9nO4HlLOXCijJLKWgeV2MX3DHOIYfSID3aQOm8867LPylq0M1d3vd0+ohP9tBThgR3CmowTCKFWxJ+pqOD71/UlOcKP/slhek/4PbllLLhziL5y8fUy6jUahwsrKa2qY+H24zz2jWP210NfbuPmoR2orKmnzgqDO4YR2SjjJj7UlxsvSmJ6v/ZYzEaOFlW67JboiiGdwln2wAjd+MSF+BDu791sXwobrmarfl5GXd5Fcu4wSVO8cCW2av8zspxCWqnhmPPFnHgeT7q/7gLsy8P/AryoKEpH4CRwg7b9BuCktv1FbT+EEF2APwBdUcUu/ymEaPPcydySKsqqHd1JW48UOUh22NqkNibY18z7qw5ytEjVvMotqWbNw6O4sk8scSE+vP7rfocbfEV1XbMulsY3Wxu3fLjBIcbSFAu25lBRU99kEaK77Mwp4UB+OUt35VGoaV6NSotk2Z58sueNZ/VDo/hDv/aM6dKOLtGBvHhVD15YtJs9uaUsyczTW88u+r+hVNdZCfQxsydXrZD+6MYBLlcfC7cf55O1hxjcMYwFdwyhY2SA0z7NcUVvtTPijIEJDEgOdUv+wtWNZdXDo1pdBFJy5gxLiWD5AyMY111dFXbQmsH1ah+MEIIpvWMBte21O7RiecoFj0fcX0KIONTeLM8C9wj1zjkSuFrb5X3gCdRGYJO1xwCfA69q+08GPlUUpRrIEkLsA/oBq9py7LtcVM0fLKjQXUhjukQxLCXcoUeEDftWugahVoLP+WIbn21Q3TALtuZwVd+GHPu9TUhP2LA3OBd1Cicp3I9/rzrIRZ3CyUg8tfSCbeVzpkJzC7eracFRgd70TQxlwdYcthwuYvvRYl5avFdPY75zZEd25pTwf//ZAsDeZy/lzlGdqKqtp/OjCxnz4jIW3n0RY19azi3Dkuncrung+S3DOjA8NRIhBN1iXavMNsdbyw/w5x8ahDZfvbqZnTVcGZWZ89fi723igxt+9/3qzjns3bp9E0NZcMcQveCwa0wQX248Soqbk5HIQAvPX9mDCG/XXVIlDXhqpfIS8ABgC06EAUWKotjKYo8AsdrjWOAwgPZ6sba/vt3FMQ4IIWYLIdYLIdafaa8AV1yREa/XkBSUVevthRtjn9W1+J5h/PfmAfyyp6Fw8r83DyBVu5FO7hnDq1f3cnqPrU+M4S2tuZO93tHyvSf04sqhnSLo0Uiy3hWTtRVVU0263OWhcWl0bhdAcrg//5jei/mzMjhRVsNTk7vpBgVgxb4TvHZ1b+JC1FqU4X/Y530vAAAckUlEQVT7hfs+24LFbGRqb9WYzv1qO9cNTuQPfdtzWS+X/52AWtR2wxm4naI1SZC549N4xq5wrjlss9VQu8nBpkNFegMvybmLn7eJbrFBelKKLdllXXahW8cHWsxc0SfOpQClxJGz/g0JISYAeYqinFrXpJVQFOVNRVEyFEXJiIho/bTOOz/ZpKcsbjhU5FSB7opgXy/6JYWx5uGL+fCG/sQG+/D+b9l6LKR/UhgT0p3daIEWMy9qir822QYvk4HooAZ5kGe/z9R7gzRHB01q5UxSigF2HC1m1/FSVh0o4LFvdtAzPoTkCLUndva88Wx5fAw3D0vmxouSGZ8ezd+n9WTToSKOFlXqFekvTOvBmodHkV9WTYDFTIif1yk+9cwY160dWx4bw8xBiQ4NtZpDCMH0fu25fnBim45NchbQ3Mw/73ZPDaOsuo7EOd85ZWdKnPGE2R0MTBJCZAOforq9XgaChRA2d1wcYEvNOQrEA2ivBwEF9ttdHHPWKa2qZVpGHBkJIdz28SaX+9jHQExGQfaJch78fCvXvrOGo0WVLM7M07NVFJoOnh8tUmMgtjRYg4BlD4xgvNYHokdcEOlxp3YJ2TpKnmnqvW3W3z8plMEdwzEKwaGCCnYdL6Xzoz8w6M9LeOPXA/oPMjVKdTlM6RVL1p/V+pPEOd/R/7kl/OuaPryyZC/L9rRtm9v3fsumx1OLmO9G7Mme8d2jnYx9Y+l+yblPr/aqe9heF685Tmq/y8YCkBJnzrpRURTlIUVR4hRFSUQNtC9VFOUa4GfgCm23mcA32uP/ac/RXl+qqNHs/wF/0LLDkoBOwNq2Hv+sQYlO2yb2iKawvJafd+czpmtUkzeZvNJq4kJ8GJ4SwZP/20FWQTm/2t083/hjH77flgM0XMSuCGikyCoQdHrkB77bmkNUoNqHIa2ZeIQNW9yl8fu1lKRwP4amRFBVZ2Vst3YEWEz83+gUrugdR1WtVReHtHWHDPI1kz1vPH+/qqceF7L1p3nu+0yu7BPnVkzoTLDJmrc0HnPtO2t0KX6AX+4bzooHR7Tq2CRtT6CmbBDq5or4dPqYtBVPP/00qampDBkyhOnTp/P888/z1ltv0bdvX3r06MHUqVOpqHBuKXG2OJfqVB4EPhVCPANsAt7Rtr8DfKAF4gtRDRGKouwQQvwX2AnUAX9SFKXNpxH2kic2vt2Soz9+7vtdvDK9F3d+4rhaCfMzU1Bey6xBifRLCmXSqyu5pGs7Vj88ivXZhdzy4Ub+u/4wMdqs3/avKxpna906PJkvNx6lpKqOD27oz5gXl9E/OdSl+8ye6f3aM72f+50km+PWYR2Y/tZqnv1uJ4+M78KfRqhS49nzxgOwaMdxwvyb/gG/9IdezJuazqgXfqVTlL9bKb5nwojOkWx5bIxDq2B3ef3X/cy5VO2f7kppVnLus/+EGo/MLzu1vJI99qblyW93sNOuT31r0CUmkMcndm3ydXtZ+9raWnr37k2fPn2YMmUKN910EwBz587lnXfe4Y477mjVsbmLR42Koii/AL9ojw+gZm813qcKcKnPrCjKs6gZZGeNNVmFDOoQym/7XQf4jAbhZFAAXpjWkzd+PcDrv+5nX14ZARYTx4oqefDzrXr8Y8W+E9w5Ui2QtC3P3cHXy8Tie1RhuOcX7aFDhB+d27UsxfZMSY7wY2rvOIf035o6K10eW0hGYgifzh7Y7PEpj/xATb2Vd6/ry3XvrmNCekyzqr9nylebjvLA51t5+rJuDmKEkt8HNhFVd1cqZ1rL1Vq4krUH2L59O3PnzqWoqIiysjIuueSslO255FxaqZwX/LavQJc3sTG2axRrs09SWF5D+1AfjhVVUV1nJTrIojfceua7nezLU4Ujbe6TospaftmTx5guUSzamctzl3fnmBYvKa8+dbe+5HA/Dpwox9tkoOMjqhZQl+hAUqICmhVGbAse+2Y72ScqeGFaD4ftdVaF1QdOnWHz3Z1D2J9fzn/XHaZvYkibd0i8vFcsJZW1XJXhXp2CPa21upN4jos6RfDj3UNJiXLvOnNlU5pbUZxtZs2axddff02PHj147733+OWXXzw2Fpkf10IaGxSAhTty9QB71okKnprclfkzM/j29gZdr4wE5yZYcSG+rHn4Yh6f1JWUKH8WbD2mpwn/0kxWiq24MiMxhDtGduSqvu1JDPMl3N+Lxyd24Yftx1nVSO24rblhSDK7c0t5XmvSBWpWWva88boLrDk6RQUwtls7sk6U4+9tanP3l9lo4MaLkp1a/56K7Hnjee5y91KQJec2qe0C3NZvC/QxExfic8bxxzOlKVn70tJSoqOjqa2t5aOPPvLoGKVRaQMe/GIb17+/nkMnGxpVzZuazh1aS1NQM7a2Hiniwc+3YhSC1HaBrM8+qde7WJrJKBqQrBooXy8T945JxctkYPE9w1j90Ch+3ZNPVKD3Wff1J4b5MqlHDH2THI1n4pzv+MOb7tejDkgOY/3Bk6fe0YN4qqeGxHME+ZhZ8eBIh55GnsBe1v7SSy/VZe2ffvpp+vfvz+DBg+ncubNHxyjdX63AhPRoFmxVg/UDkkPZeqSYipp6Vu5zXC3MGJiot5W1KmonyHB/LwZ3Uivw35mZoYtTpkQ1HROxZVHZ2gEDuvvrok7hJIT5NRvobwue+z6TzYeLnMQfAbfcXzauHdBeSsRLJM3gSta+d+/e3HrrrZ4eGiBXKq2CzaAAbD1SzCPj03j16l5cp6Uf27oYuhI9XPXQKAYkh5Ic4ceSXXm6ynFz3Rj35KpSMcv3NqQjtw/1Jdzfm4npMazNKtRrWc4W1w5I4FBhBa8udezY5677y0bHyABGNNE4SSKReFbW3h3kSqWFDE+NcFAWtjFvSncOn6zgtZ/388hXqvLu93deRIC3iVhNMNGVJMR1767jH9N70SHCnx1Hi4kKUCvjtx0tZpDWX7sxadGBHDlZ6RA8XHqvmv31t0W78fMyut3iuLVoH+rL+O7R9G6UtZY45zsGJIeeMvtLIpG4hydl7d1BGhU32X28lLLqOmYNSnQyKu9d15chHcMxGQ0YheCH7cfZm1fGb/tP4G8xERWoGopRaVEsuXcYo7RuiKCmEe/JVXuPvPyHnozsHElOcWWz0iG29sP2Evw299fknjG0C7Lg63V2/2tfXLyXNVmFvHaN86ypJe4viURyfiONiptc8tKyJl/700cbWT93NBsPFfLZhiPcNrwD3mYjE9KjubJPPL5agV29VWH7UUeV049u7E/ndoG0D/Vl9YECJveMZd7U9GbHYssQe+PaPvq2uBAfquusxAb76FX5Z5OJPaL5ZO0h3l5+gBsvSta3t8T1JZFIzn9kTKUVKK+pp6q2nhBfMznFVTz6zQ4e+HwrhwsrCfI16423DuSXcdenmx2OvebtNXiZDMSH+ugrEHexF6789f4RrJozkgCLmbiQM+vkeDokhftxabd2pDdSR25p9pdEIjm/kUbFTZqrUP/4xv4E+ZjpFBXAlF6xevbS2kYxlK4xQSz6v6FOx+eWVLFyX0GTzb0aE6MpEturC3d4+Hs6PvID1w9J5KvbBrn1Pq3JW8uyWL73BP2SnOtxpPtLIvn9II2Km9h6Xrti5rtrUYAdx4pZdaCAYSkRPDGxC1N7O/YDqbVaWZvleIP9+b7heg/5ogr3ZLWn9onDIBzrJWKDfYgM8MbbZNTTks8mw1MjKKuu44PVBx22tzT7SyKRnN9Io+Imlc30QK+tV9OwAi2q++upBTt54tudTsKP+aXVzP16O1Psmk9d9tpKzEaD2xpEAEdPVjrJ1f96/3BWzhnp9nu0NknhfoztqrYLtidxzndc9YZ0f0kkbYGiKFit1lPveBaRRsVNXriyR5OvvTMzA6NBEB1kYVCHMF0bavOhIof94kN8WXDHEKb0jmPtI6O4bXgHiitrMRsNbHx0tK7seyq+cdGquOMjP9BJywDzBJ+uO8RPmbkuRSDXZEn3l0TSWmRnZ5OamsqMGTPo1q0bRmOD+sbnn3/OrFmzAFUP7M4772TQoEEkJyfz+eefn5XxyewvNzE3oxE1UivWO1ZURdaJckZ3ieLRCV0YlupYGW5VFDV1eElDgeDpuIYu7xXrpO0VG+yjF056gu6xwdRbFT5bf5gr7UQapetLIml99u7dy/vvv8+AAQPw929aFDMnJ4cVK1awa9cuJk2axBVXXNHkvq2FNCpuYm6mwt0W27CYDeQUq0H3xZm5hPt7Mblng6urqrael5fsZWhKBMv25DMi9fTkSCpr6ikod+wD8ev9w8+4g+OZMKJzBLcO76C3KLaROOc7+ieF8p+bZfGjRNJaJCQkMGDAgFPud9lll2EwGOjSpQu5ublnYWTSqLiNLS24OSIDLWx5bAwHTpSxODNXj7XYCLCY+eq2QRRV1vLa1b0IsJxe1ft3LupQbMWPnloZeJuMPDjWWchuaEoEPdxobSyRSNzHz69BMNY+YaeqylFF3du7oYX52eoJI42Km4T4qQbAYjYQFWhpMhssyNdM99gg1j4ySm9ZasMgYN4Pu1iTVciPdw8ltd3pGZWRnSNZustRGv/jm/qf1nu1Nf++3qnvmkQiaUWioqLIzMwkNTWVr776ioCAs9ugrzHSqLhJn4RQnprchce+2cnhwub7P5uMBiI1DS97hBCsySokIyHE7eZArnh7RgbWRrOOQR1c64RJJJILm3nz5jFhwgQiIiLIyMigrKzMo+MR50qbzLNFRkaGsn79+tM6tqbOSspc5wyrlric/r0qm5SoAIe2uxKJ5PwgMzOTtLQ0Tw+jTXF1jkKIDYqiZLhzvEwpdpMNBwtJmfsD7QKdVyAt4bFvdvDn7zNbaVQSiURybiHdX25SVq0WPx4vqVKr2YH601jkPTmpK11jAk+9o0QikZyHSKPiJla7fF2rAn5eRsprmq6yb4qZWuMuiUQiuRCRRsVNUjRByY4RfpiMhrPeWVEikUjOB2RMxU1ig31Y/dAo9uWXU1heg0HLDU8O9zvFkRKJRPL7Qa5UWoC/Rf268kqrCfXzYuHdF51x4F4ikUguJORKpQX4mI2M6RJFYpgvBgGd2wV6RGZeIpH8frn++uuJjIykW7dunh6KS6RRaQFHTlawaGcu7YIsuvtLIpFIziazZs1i4cKFnh5Gk0ij0gKCfb2YOz6NYB8vaVQkEolHGDp0KKGhzh1WzxVkTKUF+HubmNY3np05JQ6tfCUSye+PF154gd27d7fqe6ampnLvvfe26nuebeRKpQUcyC8j/YlFHDlZgVyoSCQSiTNypdICwvy9mTs+jVX7CzAaqk99gEQiuWA531cUbcVZX6kIIeKFED8LIXYKIXYIIe7StocKIX4SQuzV/g3RtgshxCtCiH1CiK1CiN527zVT23+vEGJmW4890KK6v3y8jDKmIpFIJC7whPurDrhXUZQuwADgT0KILsAcYImiKJ2AJdpzgEuBTtrfbOBfoBoh4HGgP9APeNxmiNqKXcdLSX9iEceLVf0viUQiOdtMnz6dgQMHsnv3buLi4njnnXc8PSQHzrr7S1GUHCBHe1wqhMgEYoHJwHBtt/eBX4AHte3/VlSN/tVCiGAhRLS270+KohQCCCF+AsYCn7TV2KMCLcwdn8byvfkUV0qrIpFIzj6ffNJmt7hWwaOBeiFEItALWANEaQYH4DgQpT2OBQ7bHXZE29bU9jYjxNfMtL7xeJkMMvtLIpFIXOAxoyKE8Ae+AO5WFKXE/jVtVdJq3cOEELOFEOuFEOvz8/NP+322HCki/YlFFJTVyJiKRCKRuMAjRkUIYUY1KB8pivKltjlXc2uh/Wtrwn4UiLc7PE7b1tR2JxRFeVNRlAxFUTIiIiJOe9xxIb7MHZ+GxWTEIJOxJRKJxAlPZH8J4B0gU1GUv9u99D/AlsE1E/jGbvsMLQtsAFCsucl+BMYIIUK0AP0YbVubEebnxbS+8ZhNAqNcqUgkEokTnqhTGQz8EdgmhNisbXsYmAf8VwhxA3AQmKa99j0wDtgHVADXASiKUiiEeBpYp+33lC1o31aszS7k6rfWANAzPrgtP0oikUjOSzyR/bUCtRuvK0a52F8B/tTEe80H5rfe6Jqn3q77o5dR+r8kEomkMfLO2AJ+3d0Q5DcZpftLIpGcfQ4fPsyIESPo0qULXbt25eWXX/b0kByQMi1u8o8le3l7RZb+3CxXKhKJxAOYTCZeeOEFevfuTWlpKX369GH06NF06dLF00MD5ErFbRZn5jo8l0ZFIpF4gujoaHr3VtWqAgICSEtL4+hRl4mvHkGuVNzkm9uH8J91h3jwi20AmKX7SyL53TN79myX2998802gaXn8e++9l9TUVL799lu+/fZbp+PcJTs7m02bNtG/f/8WHdeWSKPiJu+tzCLzeKn+XK5UJBKJJykrK2Pq1Km89NJLBAYGeno4OtKouMm67JOcrKjRn0ujIpFITrWyOJU8/sSJE5k4cWKLP7e2tpapU6dyzTXXMGXKlBYf35bIO6ObvHZNb/4+raf+XNoUiUTiCRRF4YYbbiAtLY177rnH08NxQq5U3OT5H3dRUF5z6h0lEomkDVm5ciUffPAB3bt3p2dPdaL73HPPMW7cOA+PTEUaFTd59ef9nh6CRCKRMGTIENSa8HMT6cQ5Tc7h/1OJRCLxGNKoSCQSiaTVkEbFTXzMjl+VXKhIJBKJM9KouElKO8c8cC+T/OokEomkMfLO6CbHTlbqj6MCvbl5aLIHRyORSCTnJjL7y01Kq2sJ9jGz+N5hhPt7e3o4EolEck4iVypu0i7QwtCUCGlQJBKJR6mqqqJfv3706NGDrl278vjjj3t6SA7IlYqbFJTVcLSo8tQ7SiQSSRvi7e3N0qVL8ff3p7a2liFDhnDppZcyYMAATw8NkCsVt6msraekstbTw5BIJL9zhBD4+/sDqgZYbW0tQpw7qunSqLiJv8XEwA5hnh6GRCI5h5g9e7YuXd9aj92hvr6enj17EhkZyejRo88p6XtpVNykvKqOQwUVnh6GRCKRYDQa2bx5M0eOHGHt2rVs377d00PSEeeyhkxbkJGRoaxfv77Fx6U/8SO9E0J477p+bTAqiURyPpCZmUlaWpqnh+HAU089ha+vL/fdd1+rvJ+rcxRCbFAUJcOd4+VKxU22PnGJNCgSicTj5OfnU1RUBEBlZSU//fQTnTt39vCoGpDZX27yzIKd9E4IYVz3aE8PRSKR/I7Jyclh5syZ1NfXY7VamTZtGhMmTPD0sHSkUXGTnzJzsZiN0qhIJBKPkp6ezqZNmzw9jCaRRsVNfr1/hKeHIJFIJOc8MqYikUgkklZDGhWJRCKRtBrSqEgkEkkLuJDLMFrj3KRRkUgkEjexWCwUFBRckIZFURQKCgqwWCxn9D4yUC+RSCRuEhcXx5EjR8jPz/f0UNoEi8VCXFzcGb2HNCoSiUTiJmazmaSkJE8P45xGur8kEolE0mpIoyKRSCSSVkMaFYlEIpG0Gr87lWIhRD5w8DQPDwdOtOJwPMWFch4gz+Vc5EI5D5DnYiNBUZQId3b83RmVM0EIsd5d+edzmQvlPECey7nIhXIeIM/ldJDuL4lEIpG0GtKoSCQSiaTVkEalZbzp6QG0EhfKeYA8l3ORC+U8QJ5Li5ExFYlEIpG0GnKlIpFIJJJWQxoVNxBCjBVC7BZC7BNCzPH0eE4XIcR8IUSeEGK7p8dypggh4oUQPwshdgohdggh7vL0mE4HIYRFCLFWCLFFO48nPT2mM0UIYRRCbBJCLPD0WM4EIUS2EGKbEGKzEGK9p8dzugghgoUQnwshdgkhMoUQA9v086T7q3mEEEZgDzAaOAKsA6YrirLTowM7DYQQQ4Ey4N+KonTz9HjOBCFENBCtKMpGIUQAsAG47Hz7fxFCCMBPUZQyIYQZWAHcpSjKag8P7bQRQtwDZACBiqKcO83TW4gQIhvIUBTlvK5TEUK8DyxXFOVtIYQX4KsoSlFbfZ5cqZyafsA+RVEOKIpSA3wKTPbwmE4LRVGWAYWeHkdroChKjqIoG7XHpUAmEOvZUbUcRaVMe2rW/s7bmZ4QIg4YD7zt6bFIQAgRBAwF3gFQFKWmLQ0KSKPiDrHAYbvnRzgPb14XMkKIRKAXsMazIzk9NHfRZiAP+ElRlPPyPDReAh4ArJ4eSCugAIuEEBuEELM9PZjTJAnIB97VXJJvCyH82vIDpVGRnNcIIfyBL4C7FUUp8fR4TgdFUeoVRekJxAH9hBDnpWtSCDEByFMUZYOnx9JKDFEUpTdwKfAnzX18vmECegP/UhSlF1AOtGlcWBqVU3MUiLd7Hqdtk3gYLQbxBfCRoihfeno8Z4rmlvgZGOvpsZwmg4FJWiziU2CkEOJDzw7p9FEU5aj2bx7wFaor/HzjCHDEbvX7OaqRaTOkUTk164BOQogkLcj1B+B/Hh7T7x4twP0OkKkoyt89PZ7TRQgRIYQI1h77oCaE7PLsqE4PRVEeUhQlTlGURNTfyVJFUa718LBOCyGEn5YAguYuGgOcd1mTiqIcBw4LIVK1TaOANk1mkZ0fT4GiKHVCiNuBHwEjMF9RlB0eHtZpIYT4BBgOhAshjgCPK4ryjmdHddoMBv4IbNPiEQAPK4ryvQfHdDpEA+9rWYYG4L+KopzXqbgXCFHAV+rcBRPwsaIoCz07pNPmDuAjbVJ8ALiuLT9MphRLJBKJpNWQ7i+JRCKRtBrSqEgkEomk1ZBGRSKRSCSthjQqEolEImk1pFGRSCSSC5iWCMkKIRKEEEuEEFuFEL9osjstQhoViaSVEELcqanAfuTpsUgkdryH+wW1z6MKzqYDTwF/bumHyZRiiaSVEELsAi5WFOWI3TaToih1HhyWRGLTx1tgUycXQnQAXgMigArgJkVRdgkhdgBjFUU5rBUYFyuKEtiSz5IrFYmkFRBCvA4kAz8IIYqFEB8IIVYCHwghEoUQy4UQG7W/Qdoxw4UQvwohvhFCHBBCzBNCXKP1V9mm/fBtVfdfCCHWaX+Dte3DtF4fmzWxwACPfQGS8403gTsURekD3Af8U9u+BZiiPb4cCBBChLXkjeVKRSJpJWz9N4DbgYmogoSVQghfwKooSpUQohPwiaIoGUKI4cDXQBpqS4IDwNuKojyuNR1LUhTlbiHEx8A/FUVZIYRoD/yoKEqaEOJbYJ6iKCs1Yc0quSqSuMJ+paJdK/nAbrtdvLVrKgZ4FVXdeBkwFejWErl8KdMikbQN/1MUpVJ7bAZeFUL0BOqBFLv91imKkgMghNgPLNK2bwNGaI8vBrpokiEAgdqNYSXwdy2G86W9200iaQYDUKQpYzugKMoxtJWKdo1NbWn/Fen+kkjahnK7x/8H5AI9UFcyXnavVds9tto9t9Iw6TMAAxRF6an9xSqKUqYoyjzgRsAHWCmE6NwG5yG5wNBaRGQJIa4EVZxVCNFDexwuhLDZhYeA+S19f2lUJJK2JwjIURTFiiqCaWzh8YtQRQEB0FY8CCE6KIqyTVGUv6CqaUujInFCE5JdBaQKIY4IIW4ArgFuEEJsAXbQ0M12OLBbCLEHVVTz2ZZ+nnR/SSRtzz+BL4QQM4CFOK5i3OFO4DUhxFbU3+wy4BbgbiHECNRVzQ7gh9YbsuRCQVGU6U285JRmrCjK56g9V04bGaiXSCQSSash3V8SiUQiaTWkUZFIJBJJqyGNikQikUhaDWlUJBKJRNJqSKMikUgkklZDGhWJRCKRtBrSqEgkEomk1ZBGRSKRSCStxv8D8J99t/PRmsoAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<Figure size 432x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"sns.lineplot(x=\\\"frames\\\", y=\\\"score\\\",\\n\",\n    \"             style=\\\"run\\\", hue='algo',\\n\",\n    \"             data=df)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Gathering logs across Algo/Game pairs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Model path: /space/rlzoo/a2c/RoadRunnerNoFrameskip-v4/model1_final.pb\\n\",\n      \"Model path: /space/rlzoo/a2c/RoadRunnerNoFrameskip-v4/model2_final.pb\\n\",\n      \"Model path: /space/rlzoo/a2c/RoadRunnerNoFrameskip-v4/model3_final.pb\\n\",\n      \"Model path: /space/rlzoo/es/RoadRunnerNoFrameskip-v4/model1_final.pb\\n\",\n      \"Model path: /space/rlzoo/es/RoadRunnerNoFrameskip-v4/model2_final.pb\\n\",\n      \"Model path: /space/rlzoo/es/RoadRunnerNoFrameskip-v4/model3_final.pb\\n\",\n      \"Model path: /space/rlzoo/apex/RoadRunnerNoFrameskip-v4/model1_final.pb\\n\",\n      \"Model path: /space/rlzoo/apex/RoadRunnerNoFrameskip-v4/model2_final.pb\\n\",\n      \"Model path: /space/rlzoo/apex/RoadRunnerNoFrameskip-v4/model3_final.pb\\n\",\n      \"Model path: /space/rlzoo/apex/RoadRunnerNoFrameskip-v4/model4_final.pb\\n\",\n      \"Model path: /space/rlzoo/apex/RoadRunnerNoFrameskip-v4/model5_final.pb\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"df = gather_logs_across_algos(['a2c','es','apex'],game,local=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Plotting with seaborn\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<matplotlib.axes._subplots.AxesSubplot at 0x7fcf780d4240>\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<Figure size 432x288 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"df1 = df\\n\",\n    \"sns.lineplot(x=\\\"frames\\\", y=\\\"score\\\",\\n\",\n    \"             style=\\\"run\\\", hue='algo',\\n\",\n    \"             data=df1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Listing checkpoints available for a given run of an algorithm\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 57,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import atari_zoo\\n\",\n    \"import atari_zoo.model_maker\\n\",\n    \"import atari_zoo.log\\n\",\n    \"from atari_zoo import model_maker\\n\",\n    \"from atari_zoo.log import parse_checkpoint_info,load_checkpoint_info\\n\",\n    \"from atari_zoo.utils import *\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Print available tagged checkpoints\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 60,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"dict_keys(['400M', 'initial', '2HR', 'Human', '10HR', '1B', 'final', '1HR', '6HR', '4HR'])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"tagged_checkpoints = model_maker.GetAvailableTaggedCheckpoints('a2c','SeaquestNoFrameskip-v4',3)\\n\",\n    \"\\n\",\n    \"print(tagged_checkpoints.keys())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Get more detail on checkpoint at 1 hour\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 61,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'fname': '/space/rlzoo_raw/a2c_initial/SeaquestNoFrameskip-v4/initial_run_3/epoch_6000000.h5', 'initial': 0, 'frames': 24000000.0, 'time': 3524.2188017368317, 'final': 0, 'score': 715.4, 'policy_entropy': 2.269831657409668}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(tagged_checkpoints['1HR'])\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "requirements.txt",
    "content": "tensorflow-gpu\nmatplotlib\nmoviepy\ngym\nlucid\npandas\n"
  },
  {
    "path": "setup.py",
    "content": "from distutils.core import setup\n\nsetup(\n        name='AtariZoo',\n        version='0.1dev',\n        packages=['atari_zoo',],\n        license='Apache 2',\n        long_description=open('README.md').read(),\n)\n"
  }
]